这是本文档旧的修订版!
UI界面组件UCSIMKit 是集成云之讯的IM会话列表、聊天界面、邀请好友界面等。可快速集成和高度自定义界面的SDK 在使用 IOS SDK之前,您可以先体验一下相关DEMO能力演示,帮助您快速了解和实现相关的能力
成为云之讯平台开发者,并创建后台应用,详细步骤见注册云之讯开发者账号和管理中心使用指南。如果你已经是平台开发者,并且对云之讯平台非常熟悉,那么你可以跳过这一步继续往下看。 使用云之讯UI组件登陆云平台,需要使用token登陆,在实际的开发中,token 一般由开发者自己的服务器下发。如果开发者对token概念不理解,请点击云之讯token。
如果您还未下载UIKit SDK或者想获取最新的SDK,请点击下载云之讯UIKIT SDK(下载地址在页面底部)
从官网上下载下来的包中分为如下四部分:
1、USCIMkit.a UI组件的使用的静态库,是对界面组件的封装包 2、UCSIMKit.bundle: 包含静态库中要使用的图片、语音资源 3、Lib: 包含录音功能相关文件和emoj表情的plist文件 4、头文件说明: UCSUIKitManager.h 是SDK的核心类,是一个单例类 ChatListViewController.h 会话列表类 ChatViewController.h 聊天界面类 InfoManager.h 文件的处理类 Singleton.h、SynthesizeSingleton.h 生成单例的类 MultiSelectItem.h 选择好友的model类 MultiSelectViewController.h 选择好友的页面 SingelChatDeltailViewController.h 单聊设置界面 UCConst.h 通知的枚举类 UCSIMDefine.h IM消息相关枚举类 UCSUserInfo.h 用户model类 UCSUIKITSDK.h 包含所有的头文件 UCSTcpDefine.h TCP相关枚举类
将下载好的UCSUIKit_SDK_v3.0.0.zip包解压到任意目录。在你的项目中中加入libucsimkit.a和头文件,在你的Resource目录中加入ucsimkitBundel.bundel(资源包),将lib文件夹也拖到工程中。 生成的效果如图 2 导入UIKit SDK效果图所示:
你需要添加以下依赖库:
libc++.dylib libstdc++.dylib MessageUI.framework MediaPlayer.framwork AssetsLibrary.framework CoreLocation.framework CFNetworking.framework CoreFoundation.framework MobileCoreServices.framework。 CoreMedia.framework ImageIO.framework CoreVideo.framework AudioToolbox.framework AVFoundation.framework SystemConfiguration.framework Libz.1.1.3.dylib Libsqlite3.0.dylib
生成的效果如下图所示: 注意:在Xcode7以上的编译器上,添加库时找不到以.dylib为后缀的库,将.dylib替换成.tdb就OK了。
向Targets →Build Settings → Linking → Other Linker Flags 中添加【-ObjC】(注意大小写)
在工程的info.plist文件中,增加项 【Required background modes】,将该项的任意一个Item字段的值修改为 【App provides Voice over IP services】如图:
新建一个预编译文件,将UIKIT所有头文件引入该文件中,以后使用的时候只需要导入这个头文件就可以了,也可以不进行这一步。 预编译文件中需要加入以下两句代码:
#import <UIKit/UIKit.h> #import <Foundation/Foundation.h>
编译整个工程,如果出现错误,请返回检查编译选项。
给核心单例传送root的控制器(root控制器是你设置管理IM通讯的控制,创建好友成功后跳转的页面)
MainVC = [[HomeViewControlleralloc] init]; _nav = [[BaseNavigationViewControlleralloc] initWithRootViewController:_MainVC]; _loginVC = nil; [[UCSUIKitManager shareUCSUIKit] registeNotificationsWithRootController:_nav];
云之讯UIKit SDK的消息收发必须在和平台保持连接的情况下进行(离线推送除外),连接平台代码如下:
[[UCSUIKitManager shareUCSUIKit] connectWithToken:im_token success:^(NSString *userId) { [self connectionSuccessful:0]; } error:^(UCSConnectErrorCode status) { [self connectionFailed:-1]; }];
启动会话的主要类是 ChatListViewController
ChatListViewController *chatList = [[ChatListViewControlleralloc]init]; [chatListsetNavigationTitle:@"会话列表" textColor:[UIColorwhiteColor]]; [self.navigationControllerpushViewController:chatListanimated:YES];
启动单聊的主要类是 ChatViewController (在demo中默认一个固定的chatter)
ChatViewController *chat= [[ChatViewController alloc]initWithChatter:@"15502019128" type:1]; [self.navigationController pushViewController:chat animated:YES];
邀请好友的主要类是 MultiSelectViewController (开发者可以自定义联系人,但如果需要聊天,改联系人必须经过云之讯鉴权)
MultiSelectViewController *multiSel= [[MultiSelectViewControlleralloc]initWithType:UCSelectTypeCreatetargetId:[[InfoManagersharedInfoManager]phone ]];
[[UCSUIKitManager shareUCSUIKit]watchNetorking];
云之讯不维护和管理用户的基本信息(头像 id 、 昵称)的获取、缓存、变更和同步。所有的好友联系人的个人信息(比如昵称、头像)需要用户自己维护,UIKit SDK提供了相应的接口回调用户信息。
设计的原理: 设置用户的信息是通过代理协议来设置数据源(类似TableView的代理方式),开发者只要实现2个代理就能设置数据源(可参考Demo)。
/*! @protocol UCSIMUserInfoFetcherDelegagte 用户信息的获取器。 如果在聊天中遇到的聊天对象是没有登录过的用户(即没有通过云之讯服务器鉴权过的),IM 是不知道用户信息的,IM 将调用此 Delegagte 获取用户信息。 */ @protocol UCSIMUserInfoFetcherDelegagte <NSObject> /*! * 获取用户信息。 * @param userId 用户 Id。 * @param completion 用户信息 */ - (void)getUserInfoWithUserId:(NSString *)userId completion:(void(^)(UCSUserInfo* userInfo))completion; @end /*! 好友列表的获取器。 云之讯 本身不保存 App 的好友关系,如果在聊天中需要使用好友关系时(如:需要选择好友加入群聊),UCSIMkit 将调用此 Delegagte 获取好友列表信息。 */ @protocol UCSIMUserInfoDataSource <NSObject> /*! 获取好友信息列表。 @return 好友信息列表。 */ -(NSArray*)getFriends; @end
在提供的用户信息的类中实现2个代理,组件的SDK就能获取到用户的信息数据 getFriend是获取用户的联系人
#pragma mark - UCSIMUserInfoDataSource method -(NSArray*)getFriends { return self.allFriendsArray; } #pragma mark - RCIMUserInfoFetcherDelegagte method -(void)getUserInfoWithUserId:(NSString *)userId completion:(void(^)(UCSUserInfo* userInfo))completion { UCSUserInfo *user = nil; if([userId length] == 0) return completion(nil); for(UCSUserInfo *u in self.allFriendsArray){ if([u.userId isEqualToString:userId]){ user = u; break; } } return completion(user); }
通过子类的继承的方式,重写父类方法来达到UI的自定义。从而自定义内容更广,形式更加简单。
会话列表界面、会话界面、邀请好友界面、聊天设置界面都继承BaseViewController。 可以被重写的方法如下:
/*! @brief 配置导航栏上 */ -(void)configureNavigationBar; /*! * 导航左面按钮点击事件 */ - (void)leftBarButtonItemPressed:(id)sender; /*! * 导航右面按钮点击事件 */ - (void)rightBarButtonItemPressed:(id)sender; /*! @brief 设置导航栏的标题的颜色和文字 */ - (void)setNavigationTitle:(NSString *)title textColor:(UIColor*)textColor;
注意:BaseViewController中只有-(void)configureNavigationBar;这个方法。聊天界面、邀请好友界面以上方法都存在。
Q:集成SDK后,头像不显示
A:检查是否正确实现了-(NSArray*)getFriends;这个代理方法。