###一.概述
InstantMessaging(即时通讯、实时通讯)的缩写是IM,这是一种可以让使用者在网络上建立某种私人聊天室(chatroom)的实时通讯服务。大部分的即时通讯服务提供了状态信息的特性──显示联络人名单,联络人是否在线及能否与联络人交谈。目前在互联网上受欢迎的即时通讯软件包括腾讯QQ、百度HI、飞信、易信、阿里旺旺、yy、Skype、Google Talk、icq、FastMsg等。
###二.开发APP
网络上有很多公司提供有SDK,我这里选择使用的是融云的SDK。IMKit
是融云 SDK 的核心特色之一。融云将即时通讯产品中最复杂的会话列表、聊天窗口、消息内容展现、会话设置等功能封装为组件,通过简短的代码,就可以直接将以上界面集成到 App 产品中,省去大量的开发调试时间。同时支持很多自定义界面组件功能,可以针对自己界面需求自由设计开发。
####一.前期准备
1.首先前往融云官方网站注册开发者帐号。
2.注册了开发者账号之后,在进行开发App之前,前往融云开发者控制台创建应用;
3.获取AppKey
和TOKEN
。
4.下载与导入SDK
有两种方式可以将 SDK 导入到项目中:
-
通过 CocoaPods 管理依赖;
-
手动导入 SDK 并管理依赖;
####通过 CocoaPods 管理依赖
CocoaPods 是目前最流行的 Cocoa 项目库依赖管理工具之一,考虑到便捷与项目的可维护性,更推荐使用 CocoaPods 导入并管理 SDK。
- 用 CocoaPods 导入SDK
在工程根目录下新建一个 Podfile 文件,在文件中输入以下内容
platform :ios,'8.0'
target "textIM" do
pod 'RongCloudIMKit', '~>2.4.3'
end
然后在终端中运行pod install
命令。完成后,CocoaPods 会在工程根目录下生成一个 .xcworkspace
文件。需要通过此文件打开工程,而不是之前的 .xcodeproj
。
#####CocoaPods 的一些使用说明: CocoaPods 中,有几种设置 SDK 版本的方法。如:
-
'>= 2.4.X' 会根据您本地的 CocoaPods 源列表,导入不低于 2.4.X 版本的 SDK。
-
'~> 2.4.X' 会根据您本地的 CocoaPods 源列表,介于 2.4.X~2.5.0 之前版本的 SDK。
####手动导入 SDK 并管理依赖
-
可以到官方网站下载融云SDK。
-
将得到的SDK文件导入到工程中。
-
添加系统库依赖
-
Build Settings下的 Other Linker Flags中添加
-ObjC
######注意:
IOS9中,Apple 引入了新特性 App Transport Security (ATS)
,默认要求 App 必须使用 https 协议。iOS9 上需要使用 http,您需要设置在 App 中使用 http。
-
在 App 的 Info.plist 中添加 NSAppTransportSecurity 类型Dictionary。
-
在 NSAppTransportSecurity 下添加 NSAllowsArbitraryLoads 类型 Boolean,值设为 YES。
####二.IMKit 快速集成
现在我们已经准备好了工程和 AppKey 相关事宜可以正式开发 APP 了。
#####1.初始化 SDK
在需要使用融云 SDK 功能的类中,导入关头文件:
使用之前从融云开发者控制台注册得到的 AppKey,通过RCIM的单例,传入 initWithAppKey:
方法,初始化 SDK。
[[RCIM sharedRCIM] initWithAppKey:AppKey];
#####2.获取 Token,
Token 即用户令牌,相当于 APP 上当前用户连接融云的身份凭证。在连接融云服务器之前,需要请求 App Server,App Server通过Server API 获取 Token 并返回给客户端,客户端获取到这个 Token 即可进入下一步连接融云服务器。融云客户端不提供获取 Token的接口 必须在服务器端请求 Token。 但是开发者控制台提供了 API 调试的功能,在开发初期阶段,可以通过其中获取 Token 功能,手动获取 Token 进行测试。
#####3.连接服务器
将在上一步获取到的 Token,通过 RCIM 的单例,传入-connectWithToken:success:error:tokenIncorrect:
方法,即可建立与服务器的连接。
在 App 整个生命周期,只需要调用一次此方法与融云服务器建立连接。之后无论是网络出现异常或者 App 有前后台的切换等,SDK 都会负责自动重连。SDK 针对 iOS 的前后台和各种网络状况,进行了连接和重连机制的优化,建议只调用一次 connectWithToken 即可,其余交给SDK处理。 除非已经手动将连接断开,否则不需要自己再手动重连。
[[RCIM sharedRCIM] connectWithToken:@"Token" success:^(NSString *userId) {
NSLog(@"登陆成功。当前登录的用户ID:%@", userId);
} error:^(RCConnectErrorCode status) {
NSLog(@"登陆的错误码为:%d", status);
} tokenIncorrect:^{
NSLog(@"token错误");
}];
#####4.启动聊天界面
融云 IMKit 中已经实现了完整的聊天界面,包含发送、接收、更新等 UI,并覆盖常用的IM交互场景,可以直接使用或继承RCConversationViewController
,即可快速启动和使用聊天界面。创建一个 RCConversationViewController
对象并设置好会话类型、目标会话 ID,显示即可进行聊天。
//新建一个聊天会话View Controller对象
RCConversationViewController *chat = [[RCConversationViewController alloc]init];
//设置会话的类型,如单聊、讨论组、群聊、聊天室、客服、公众服务会话等
chat.conversationType = ConversationType_PRIVATE;
//设置会话的目标会话ID。(单聊、客服、公众服务会话为对方的ID,讨论组、群聊、聊天室为会话的ID)
chat.targetId = @"targetIdYouWillChatIn";
//设置聊天会话界面要显示的标题
chat.title = @"想显示的会话标题";
//显示聊天会话界面
[self.navigationController pushViewController:chat animated:YES];
启动聊天界面之后,您可以通过下方的输入框和扩展功能模块,直接发送文本、语音、图片、位置等消息。
#####5.启动会话列表界面
融云 IMKit 已经实现了一个默认的会话列表视图控制器,可以直接使用或继承 RCConversationListViewController,即可快速启动和使用会话列表界面。
//设置需要显示哪些类型的会话
[self setDisplayConversationTypes:
@[
// 私聊
@(ConversationType_PRIVATE),
// 聊天室
@(ConversationType_CHATROOM),
// 群组
@(ConversationType_GROUP),
// 讨论组
@(ConversationType_DISCUSSION)]];
//设置需要将哪些类型的会话在会话列表中聚合显示
[self setCollectionConversationType:
@[@(ConversationType_PRIVATE),
@(ConversationType_GROUP)]];
聚合显示指的是此类型所有会话,在会话列表中聚合显示成一条消息,点击进去会再显示此类型的具体会话列表。设置在会话列表界面显示哪些类型的会话,以及将哪些类型的会话在会话列表中聚合显示。
#####6.用户信息与群组信息显示
设置用户ID、昵称、头像。
首先签订协议
用户信息提供者 SDK 需要通过实现的用户信息提供者,获取用户信息并显示。
然后实现- (void)getUserInfoWithUserId:(NSString *)userId completion:(void (^)(RCUserInfo *userInfo))completion;
方法。SDK 通过此方法获取用户信息并显示,请在completion中返回该用户ID对应的用户信息。在设置了用户信息提供者之后,SDK在需要显示用户信息的时候,会调用此方法,请求用户信息用于显示。
RCUserInfo *userInfo = [[RCUserInfo alloc] init];
// 用户ID
userInfo.userId = userId;
// 用户昵称
userInfo.name = @"用户昵称";
// 头像URL
userInfo.portraitUri = @"URL";
#####7.其他设置
会话列表 cell 的背景色
self.cellBackgroundColor = [UIColor yellowColor];
即将显示CELL的回调方法
- (void)willDisplayConversationTableCell:(RCConversationBaseCell *)cell atIndexPath:(NSIndexPath *)indexPath {
// 拿到数据源
RCConversationModel *model = self.conversationListDataSource[indexPath.row];
if (model.conversationType == ConversationType_PRIVATE) {
// 转换类型
RCConversationCell *ConversationCell = (RCConversationCell *)cell;
// 昵称颜色
ConversationCell.conversationTitle.textColor = [UIColor blueColor];
}
}
######注意: 如果是在IOS10中plist文件中添加两个字符段
-
Privacy - Camera Usage Description
-
Privacy - Photo Library Usage Description
用以请求相机和照片的访问
###四.DEMO
这里是自制的一个DENMO 仅供参考。。。略坑勿喷
IM即时通讯
###五.结束
如果您已经阅读了上面的文档内容,并准备好工程和 AppKey 相关事宜,则可以参考本章内容,快速便捷的集成融云即时通讯部分功能(启动会话列表,进入会话,发送文本、语音、图片、位置消息等)。