用户工具

im_ios_ui组件开发指南

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
im_ios_ui组件开发指南 [2016/01/20 08:08]
liuxia
im_ios_ui组件开发指南 [2017/08/23 08:44] (当前版本)
行 1: 行 1:
-====== 1、IM iOS UIKitSDK简介 ====== +====== 1、IM iOS UIKit SDK简介 ====== 
-UI界面组件UCSIMKit 是集成云之讯的IM会话列表、聊天界面、邀请好友界面等。可快速集成和高度自定义界面的SDK +云之讯IM UIKit是在原子SDK基础上封装了IM相关的上层业务和UI,开发者无须处理复杂IM业务及UI,只需启动已封装好的界面就能拥有IM功能。包括:IM会话列表界面、好友列表界面、聊天界面等。 
-在使用 IOS SDK之前,您可以先体验一下相关DEMO能力演示,帮助您快速了解和实现相关的能力+
 ====== 2、集成前的准备 ====== ====== 2、集成前的准备 ======
-成为云之讯平台开发者,创建后台应用,详细步骤见注册云之讯开发者账号和管理中心使用指南。如果已经是平台开发者,并且对云之讯平台非常熟悉,那么可以跳过这一步继续往下看。 +您需要成为云之讯平台开发者,然后在平台创建应用,详细步骤见注册云之讯开发者账号和管理中心使用指南。如果已经是平台开发者,并且对云之讯平台非常熟悉,那么可以跳过这一步继续往下看。 
-使用云之讯UI组件登陆云平台,需要使用token登陆,在实际的开发中,token ​一般由开发者自己的服务器下发。如果开发者对token概念不理解,请点击云之讯token+使用云之讯UIKIt组件登陆云平台,需要使用token,token是需要服务器向云平台申请,然后下发给用户登录
  
 ======3、下载UIKit组件的SDK ====== ======3、下载UIKit组件的SDK ======
-如果还未下载UIKit SDK或者想获取最新的SDK,请点击下载云之讯UIKIT SDK([[http://​www.ucpaas.com/​product_service/​im#​item4|下载地址]])+下载云之讯UI组件最新的SDK,请点击UIKIT SDK连接([[http://​www.ucpaas.com/​product_service/​im#​item4|下载地址]])
 =====3.1、SDK目录讲解 ===== =====3.1、SDK目录讲解 =====
-从官网上下载下来的包中分为如下四部分:+从官网上下载的SDK含的主要四部分:
 <code java> <code java>
-1、USCIMkit.a ​       UI组件使用的静态库,是对界面组件的封装包 ​+1、USCIMkit.a ​       UI组件使用的静态库,界面组件的封装包 ​
 2、UCSIMKit.bundle: ​ 包含静态库中要使用的图片、语音资源 2、UCSIMKit.bundle: ​ 包含静态库中要使用的图片、语音资源
-3、Lib: ​             包含录音功能相关文件emoj表情的plist文件地图坐标信息转换的db文件 +3、Lib: ​             包含录音功能相关文件emoj表情的plist文件地图坐标信息转换的db文件 
-4、3rdParty: ​        ​UIKIT使用的第三方文件(避免重复引用冲突) +4、头文件说明: 
-5、头文件说明: +UCSUIKitManager.h  ​               SDK的核心类,单例类
-UCSUIKitManager.h  ​               ​SDK的核心类,是一个单例类+
 ChatListViewController.h ​               会话列表类 ChatListViewController.h ​               会话列表类
 ChatViewController.h  ​               聊天界面类 ChatViewController.h  ​               聊天界面类
行 31: 行 30:
 UCSUIKITSDK.h  ​                       包含所有的头文件 UCSUIKITSDK.h  ​                       包含所有的头文件
 UCSTcpDefine.h  ​                       TCP相关枚举类 UCSTcpDefine.h  ​                       TCP相关枚举类
-UCSError.h ​                             SDK错误类型的定义+UCSError.h ​                             SDK错误类型类
 </​code>​ </​code>​
 +<​html>​
 +<span style="​color:​red;​font-size:​100%;">​注意事项:添加的Lib文件成功的标志是在工程文件中的Copy Bundle Resource配置栏有相应的显示。
 + </​span>​
 +</​html>​
 +
 ======4、SDK配置工程 ====== ======4、SDK配置工程 ======
 ===== 4.1、新建工程 ===== ===== 4.1、新建工程 =====
行 38: 行 42:
 {{ :​无标题1.png |}} {{ :​无标题1.png |}}
 =====4.2、导入UIKIT SDK ===== =====4.2、导入UIKIT SDK =====
-将下载好的UCSUIKit_SDK_v3.0.0.zip包解压到任意目录。在的项目中加入libucsimkit.a头文件,​在你的Resource目录中加入ucsimkitBundel.bundel(资源包),lib文件夹和3rdParty文件夹 也拖到工程中。 +将下载好的UCSUIKit_SDK(版本号).zip包解压到任意目录。在的项目中加入libucsimkit.a头文件ucsimkitBundel.bundel(资源包),lib文件夹。 
-生成的效果如图 2  ​导入UIKit SDK效果图所示:​ + ​导入UIKit SDK后工程界面如下图所示:​ 
-{{ :​屏幕快照_2016-01-20_下午12.29.31.png |}} +{{ :​屏幕快照_2016-03-07_下午5.21.44.png |}}
 =====4.3、添加依赖库 ===== =====4.3、添加依赖库 =====
-需要添加以下依赖库:+需要添加以下依赖库:
 <code java> <code java>
 libc++.dylib ​ libc++.dylib ​
行 64: 行 67:
 SystemConfiguration.framework SystemConfiguration.framework
 </​code>​ </​code>​
-生成的效果如下图所示:+生成的界面如下图所示:
 {{ :​屏幕快照_2016-01-20_下午2.17.16.png |}} {{ :​屏幕快照_2016-01-20_下午2.17.16.png |}}
-注意:在Xcode7以上的编译器上,添加库时找不到以.dylib为后缀的库,将.dylib替换成.tdb就OK了。 +<​html>​ 
-=====4.4、配置编译选项 ===== +<span style="​color:​red;​font-size:​100%;">​注意事项:在Xcode7以上的编译器上,添加库时找不到以.dylib为后缀的库,将.dylib替换成.tdb就OK了。 
-向Targets ->Build Settings -> Linking -> Other Linker Flags 中添加【-ObjC】(注意大小写)+ </​span>​ 
 +</html>
  
-在工程的info.plist文件中,增加项 【Required background modes】,将该项的任意一个Item字段的值修改为 【App provides Voice over IP services】如图: 
-{{ :​123456789.jpg?​nolink |}} 
 =====4.5、预编译SDK ===== =====4.5、预编译SDK =====
-新建一个预编译文件,将UCSUIKITSDK.h引入预编译文件中。如果工程中已经存在预编译文件,那么UCSUIKITSDK.h引入该文件。 +新建一个预编译文件,将UCSUIKITSDK.h引入预编译文件中。如果工程中已经存在UCSUIKITSDK.h预编译文件,直接将文件导入工程。 
-预编译文件需要两句代码+如果新建预编译文件需要入下面2个头文件
 <code java> <code java>
 #import <​UIKit/​UIKit.h>​ #import <​UIKit/​UIKit.h>​
行 82: 行 84:
 ====== 5、IOS UIKit SDK快速集成 ====== ====== 5、IOS UIKit SDK快速集成 ======
 ===== 5.1、初始化SDK ===== ===== 5.1、初始化SDK =====
-核心单例传送root的控制器(root控制器是你设置管理IM通讯控制,在选择好友页面,创建讨论组和单聊后的页面跳转) +调用核心单例设置推送类型 
-<​code ​iOS+<​code ​java
-MainVC = [[HomeViewControlleralloc] init]; +//​通过单例的方法来调用核心类的能力接口 
-_nav = [[BaseNavigationViewControllerallocinitWithRootViewController:​_MainVC];​ +[UCSUIKitManager shareUCSUIKit
-_loginVC = nil; +/** 
-[[UCSUIKitManagershareUCSUIKitregisteNotificationsWithRootController:_nav];+*  设置开发环境 
 +*  参数 ​  ​parameter ​  ​UCSPushEnvironment ​  ​是枚举类型 ​ 开发环境和发布环境 
 +*/ 
 +[[UCSUIKitManager shareUCSUIKit]setPushEnvironment:UCSPushEnvironment_Production];
 </​code>​ </​code>​
-===== 5.2、连接服务器 ===== +<​html>​ 
-云之讯UIKit SDK的消息收发必须在和平保持连接情况下进行(离线推送除外)连接平代码如下:+<span style="​color:​red;​font-size:​100%;">​ 
 +- 注意事项: 
 + ​首先必须设置deviceToken,模拟是无法获取devicetoken,也就没有推送功能。 </​span>​ 
 +</​html>​ 
 + 
 +<​html>​ 
 +<span style="​color:​red;​font-size:​100%;">​ 
 +        - 当使用"​开/测试环境"​的appkey测试推送时,必须用Development的证书打包,并且上传"​开发/测试环境"​推送证书,证书必须是development的。 当使用"​生产/线上环境"​的appkey测试推送必须用Distribution的证书打包,并且在后上传"​生产/线上环境"​的推送证书,证书必须是distribution的。 </​span>​ 
 +</​html>​ 
 + 
 +===== 5.2、设置推送开发环境 =====
 <code iOS> <code iOS>
 +推送的环境要根据上传的证书的类型来匹配,证书是发布证书,对应设置为发布环境。同理,如果证书是开发型证书,对应设置为开发环境。(证书的类型可以在钥匙串访问中查找)
 +//​设置推送的环境 ​  ​1为开发 ​   其他为发布
 +eg:
 +[[UCSUIKitManager shareUCSUIKit]setPushEnvironment:​UCSPushEnvironment_Develop]; ​
 +在Appdelegate相应的系统方法中,保存推送的Token
 +- (void)application:​(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:​(NSData *)deviceToken
 +{
 + ​NSString *deviceToken1 = [[[[deviceToken description]
 +                                stringByReplacingOccurrencesOfString:​@"<"​withString:​@""​]
 +                               ​stringByReplacingOccurrencesOfString:​@">"​ withString:​@""​]
 +                              stringByReplacingOccurrencesOfString:​ @" " withString: @""​];​
 +    [[NSUserDefaults standardUserDefaults] setObject:​deviceToken1 forKey:​@"​DeviceToken"​];​
 +    [[NSUserDefaults standardUserDefaults] synchronize];​
 +}
 +</​code>​
 +<​html>​
 +<span style="​color:​red;​font-size:​100%;">​
 +注意事项:
 +NSUserDefaults设置的DeviceToken的名字一定要是"​DeviceToken",​这样才能被SDK识别。 </​span>​
 +</​html>​
 +
 +===== 5.3、连接服务器 =====
 +云之讯UIKit SDK的消息收发必须在和平台保持连接的情况下进行(离线推送除外),连接平台示例代码如下:
 +<code java>
 +/**
 + ​* ​ 连接服务器
 + ​@param token               ​从服务端获取的用户身份令牌(Token)。
 + ​@param successBlock ​       调用完成的处理。
 + ​@param errorBlock ​         调用返回的错误信息。
 + ​@param tokenIncorrectBlock token错误或者过期。需要重新换取token,但需要注意避免出现无限循环。
 + ​@return ​                   无
 + */
 [[UCSUIKitManager shareUCSUIKit] connectWithToken:​im_token success:​^(NSString *userId) { [[UCSUIKitManager shareUCSUIKit] connectWithToken:​im_token success:​^(NSString *userId) {
    [self connectionSuccessful:​0];​    [self connectionSuccessful:​0];​
行 99: 行 146:
 </​code>​ </​code>​
  
-===== 5.3、启动会话列表界面 =====+ 
 +===== 5.4、启动会话列表界面 =====
 启动会话的主要类是 ​   ChatListViewController 启动会话的主要类是 ​   ChatListViewController
  
 <code iOS> <code iOS>
 ChatListViewController *chatList = [[ChatListViewControlleralloc]init];​ ChatListViewController *chatList = [[ChatListViewControlleralloc]init];​
-[chatListsetNavigationTitle:​@"​会话列表"​ textColor:​[UIColorwhiteColor]];​ 
 [self.navigationControllerpushViewController:​chatListanimated:​YES];​ [self.navigationControllerpushViewController:​chatListanimated:​YES];​
 </​code>​ </​code>​
-===== 5.4、启动单聊会话界面 =====+===== 5.5、启动单聊会话界面 =====
 启动单聊的主要类是 ChatViewController (在demo中默认一个固定的chatter) 启动单聊的主要类是 ChatViewController (在demo中默认一个固定的chatter)
 <code iOS> <code iOS>
行 114: 行 161:
 </​code>​ </​code>​
  
-===== 5.5、启动邀请好友界面 ===== +===== 5.6、启动邀请好友界面 ===== 
-邀请好友的主要类是 ​ MultiSelectViewController (开发者可以自定义联系人,但如果需要聊天,改联系人必须经过云之讯鉴权)+邀请好友的主要类是 ​ MultiSelectViewController (开发者可以自定义联系人,但联系人必须经过云之讯鉴权)
 <code iOS> <code iOS>
 MultiSelectViewController *multiSel= [[MultiSelectViewControlleralloc]initWithType:​UCSelectTypeCreatetargetId:​[[InfoManagersharedInfoManager]phone ]]; MultiSelectViewController *multiSel= [[MultiSelectViewControlleralloc]initWithType:​UCSelectTypeCreatetargetId:​[[InfoManagersharedInfoManager]phone ]];
 +[self.navigationController pushViewController:​multiSel animated:​YES];​
 </​code>​ </​code>​
  
-======6、显示用户头像和昵称以及好友联系人 ​======+===== 5.8、SDK的其他接口 ===== 
 +UIKitSDK还提供了其他的接口,供开发者自由选择搭配。示例代码如下: 
 +<code java> 
 + /** 
 +   ​获取所有未读信息的数量 
 +   ​@return ​         返回的具体数据  
 + */ 
 +- (NSInteger)getTotalUnreadCount;​ 
 +/** 
 +  查询帐号与服务器连接状态 
 +  @return ​ Yes 为是连接状态 ​ NO 离线状态 
 + */ 
 +- (BOOL)isConnected;​ 
 +</​code>​ 
 +======6、UI的自定义====== 
 +===== 6.1、用户头像和昵称以及好友联系人的自定义  ​=====
  
-云之讯不维护和管理用户的基本信息(头像 id 、 昵称)的获取、缓存、变更和同步。所有的好友联系人的个人信息(比如昵称、头像)需要用户自己维护,UIKit SDK提供了相应的接口回调用户信息。+云之讯不维护和管理用户的基本信息(头像 id 、 昵称)的获取、缓存、变更和同步。所有的好友联系人的个人信息(比如昵称、头像)需要开发者自己维护,UIKit SDK提供了相应的接口回调用户信息。
  
 设计的原理: 设计的原理:
 +通过UCSUIKitManager的代理设置数据源的参数,然后调用代理方法参数的Block来回调数据,完成SDK从外部数据的获取。
 +
 设置用户的信息是通过代理协议来设置数据源(类似TableView的代理方式),开发者只要实现2个代理就能设置数据源(可参考Demo)。 设置用户的信息是通过代理协议来设置数据源(类似TableView的代理方式),开发者只要实现2个代理就能设置数据源(可参考Demo)。
-<​code ​iOS+<​code ​java
-/*!+/**
  ​@protocol UCSIMUserInfoFetcherDelegagte  ​@protocol UCSIMUserInfoFetcherDelegagte
  ​用户信息的获取器。  ​用户信息的获取器。
- 如果在聊天中遇到的聊天对象是没有登录过的用户(即没有通过云之讯服务器鉴权过的),IM 是不知道用户信息的,​IM 将调用此 Delegagte 获取用户信息。+ IM 是不知道用户信息的,​IM 将调用此 Delegagte 获取用户信息。
  */  */
 @protocol UCSIMUserInfoFetcherDelegagte <​NSObject>​ @protocol UCSIMUserInfoFetcherDelegagte <​NSObject>​
-/*!+/**
  ​* ​ 获取用户信息。  ​* ​ 获取用户信息。
  ​* ​ @param userId ​    ​用户 Id。  ​* ​ @param userId ​    ​用户 Id。
行 141: 行 206:
 @end @end
  
-/*!+/**
  ​好友列表的获取器。  ​好友列表的获取器。
  ​云之讯 本身不保存 App 的好友关系,如果在聊天中需要使用好友关系时(如:需要选择好友加入群聊),UCSIMkit 将调用此 Delegagte 获取好友列表信息。  ​云之讯 本身不保存 App 的好友关系,如果在聊天中需要使用好友关系时(如:需要选择好友加入群聊),UCSIMkit 将调用此 Delegagte 获取好友列表信息。
  */  */
 @protocol UCSIMUserInfoDataSource <​NSObject>​ @protocol UCSIMUserInfoDataSource <​NSObject>​
-/*!+/**
  ​获取好友信息列表。  ​获取好友信息列表。
  ​@return 好友信息列表。  ​@return 好友信息列表。
行 155: 行 220:
 在提供的用户信息的类中实现2个代理,组件的SDK就能获取到用户的信息数据 在提供的用户信息的类中实现2个代理,组件的SDK就能获取到用户的信息数据
 getFriend是获取用户的联系人 getFriend是获取用户的联系人
-<​code ​iOS>+<​code ​java>
 在试图控制器里设置一个代理然后实现参数的传递 在试图控制器里设置一个代理然后实现参数的传递
 //​设置代理 //​设置代理
行 183: 行 248:
 </​code>​ </​code>​
  
-======7、群信息头像和名称的自定义 ​======+===== 6.2、群信息头像和名称的自定义 ​ =====
  
 云之讯群信息头像的的自定义和用户头像的自定义原理是一样的,需要开发者自己根据获取群的ID设置群的头像和名称。 云之讯群信息头像的的自定义和用户头像的自定义原理是一样的,需要开发者自己根据获取群的ID设置群的头像和名称。
  
 设计的原理: 设计的原理:
 +通过UCSUIKitManager的代理设置数据源的参数,然后调用代理方法参数的Block来回调数据,完成SDK从外部数据的获取。
 +
 设置群信息是通过代理协议来设置数据源(类似TableView的代理方式),开发者只要实现2个代理就能设置数据源(可参考Demo)。 设置群信息是通过代理协议来设置数据源(类似TableView的代理方式),开发者只要实现2个代理就能设置数据源(可参考Demo)。
-<​code ​iOS+ 
-/*!+<​code ​java
 +/**
  ​@protocol UCSIMUserInfoFetcherGroupDelegagte  ​@protocol UCSIMUserInfoFetcherGroupDelegagte
  ​群信息的代理  ​群信息的代理
  */  */
 @protocol UCSIMGroupInfoFetcherDelegagte <​NSObject>​ @protocol UCSIMGroupInfoFetcherDelegagte <​NSObject>​
-/*!+/**
  ​* ​ 获取某个群信息。  ​* ​ 获取某个群信息。
  *  *
行 203: 行 271:
 - (void)getGroupInfoWithGroupId:​(NSString *)groupId completion:​(void(^)(UCSGroupInfo *groupInfo))completion;​ - (void)getGroupInfoWithGroupId:​(NSString *)groupId completion:​(void(^)(UCSGroupInfo *groupInfo))completion;​
 @end @end
-/*!+/**
  ​群信息数据获取器。  ​群信息数据获取器。
  */  */
 @protocol UCSIMGroupInfoDataSource <​NSObject>​ @protocol UCSIMGroupInfoDataSource <​NSObject>​
-/*!+/**
  ​获取群信息列表。  ​获取群信息列表。
  ​@return 群信息信息列表。  ​@return 群信息信息列表。
行 217: 行 285:
 在提供的用户信息的类中实现2个代理,组件的SDK就能获取到用户的信息数据 在提供的用户信息的类中实现2个代理,组件的SDK就能获取到用户的信息数据
 getGroupDat是开发者根据群ID设置群的消息 getGroupDat是开发者根据群ID设置群的消息
-<​code ​iOS>+<​code ​java>
 #pragma mark -UCSIMGroupInfoDataSource #pragma mark -UCSIMGroupInfoDataSource
 - (NSArray*)getGroupData - (NSArray*)getGroupData
行 258: 行 326:
 </​code>​ </​code>​
  
-======8UI的自定义 ======+===== 6.3导航栏的自定义 ​ ===== 
 通过子类的继承的方式,重写父类方法来达到UI的自定义。从而自定义内容更广,形式更加简单。 通过子类的继承的方式,重写父类方法来达到UI的自定义。从而自定义内容更广,形式更加简单。
  
 会话列表界面、会话界面、邀请好友界面、聊天设置界面都继承BaseViewController。 会话列表界面、会话界面、邀请好友界面、聊天设置界面都继承BaseViewController。
-可以被重写的方法如下:​ +能够被重写的方法如下所示
-<​code ​iOS+<​code ​java
-/*!+/**
  ​@brief ​ 配置导航栏上  ​@brief ​ 配置导航栏上
  */  */
 -(void)configureNavigationBar;​ -(void)configureNavigationBar;​
- +/**
-/*!+
  ​* ​ 导航左面按钮点击事件  ​* ​ 导航左面按钮点击事件
  */  */
 - (void)leftBarButtonItemPressed:​(id)sender;​ - (void)leftBarButtonItemPressed:​(id)sender;​
- +/**
-/*!+
  ​* ​ 导航右面按钮点击事件  ​* ​ 导航右面按钮点击事件
  */  */
 - (void)rightBarButtonItemPressed:​(id)sender;​ - (void)rightBarButtonItemPressed:​(id)sender;​
  
-/*! 
- ​@brief ​ 设置导航栏的标题的颜色和文字 
- */ 
-- (void)setNavigationTitle:​(NSString *)title textColor:​(UIColor*)textColor;​ 
 </​code>​ </​code>​
-注意:BaseViewController中只有-(void)configureNavigationBar;​这个方法。聊天界面、邀请好友界面以上方法都存在。 
-======9、常见问题 ====== 
  
-Q:集成SDK后,头像不显示+<​html>​ 
 +<span style="​color:​red;​font-size:​100%;">​注意事项: 
 +1、如果需要替换聊天界面的背景图片,可以在ucsimkitBundle.bundle资源库文件中替换对应chat_backgroud_sky名字的图片 
 +2、自定义的聊天界面需要开发者新建一个类,继承chatviewController。</​span>​ 
 +</​html>​ 
 + 
 + 
 +======7、常见问题 ====== 
 + 
 +**Q:集成SDK后,头像不显示** 
 + 
 +<​html>​ 
 +<span style="​color:​red;​font-size:​100%;">​A:检查是否正确实现了-(NSArray*)getFriends;这个代理方法。 </​span>​ 
 +</​html>​ 
 + 
 + 
 +**Q:集成SDK后,如果自定义了聊天页面(chatViewController),然后需击会话页面的cell,进入聊天页面,聊天页面的风格需要和自定义的聊天页面相同。 
 +** 
 + 
 +<​html>​ 
 +<span style="​color:​red;​font-size:​100%;">​A:请联系我们的技术支持,有相应的定制版本。 </​span>​ 
 +</​html>​ 
 + 
 + 
 +**Q:集成SDK后,编译的过程fail,bug工作台出现----x86的字样。 
 +** 
 + 
 +<​html>​ 
 +<span style="​color:​red;​font-size:​100%;">​A:请选择真机调试,SDK库文件暂不支持模拟器编译。 </​span>​
  
-A:检查是否正确实现了-(NSArray*)getFriends;这个代理方法。+</​html>​
最后更改: 2017/08/23 08:44

页面工具