文档章节

IOS-IM即时通讯

一人丨天空
 一人丨天空
发布于 2016/09/23 18:34
字数 2000
阅读 65
收藏 2
iOS

###一.概述

InstantMessaging(即时通讯、实时通讯)的缩写是IM,这是一种可以让使用者在网络上建立某种私人聊天室(chatroom)的实时通讯服务。大部分的即时通讯服务提供了状态信息的特性──显示联络人名单,联络人是否在线及能否与联络人交谈。目前在互联网上受欢迎的即时通讯软件包括腾讯QQ、百度HI、飞信、易信、阿里旺旺、yy、Skype、Google Talk、icq、FastMsg等。

###二.开发APP

网络上有很多公司提供有SDK,我这里选择使用的是融云的SDK。IMKit 是融云 SDK 的核心特色之一。融云将即时通讯产品中最复杂的会话列表、聊天窗口、消息内容展现、会话设置等功能封装为组件,通过简短的代码,就可以直接将以上界面集成到 App 产品中,省去大量的开发调试时间。同时支持很多自定义界面组件功能,可以针对自己界面需求自由设计开发。

####一.前期准备

1.首先前往融云官方网站注册开发者帐号。

2.注册了开发者账号之后,在进行开发App之前,前往融云开发者控制台创建应用;

3.获取AppKeyTOKEN

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 功能的类中,导入关头文件:<RongIMKit/RongIMKit.h>

使用之前从融云开发者控制台注册得到的 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、昵称、头像。

首先签订协议<RCIMUserInfoDataSource> 用户信息提供者 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 相关事宜,则可以参考本章内容,快速便捷的集成融云即时通讯部分功能(启动会话列表,进入会话,发送文本、语音、图片、位置消息等)。

© 著作权归作者所有

一人丨天空
粉丝 4
博文 4
码字总数 5612
作品 0
大足
程序员
私信 提问
EntboostChat 1.4.2发布,iOS 开源 IM

恩布企业即时通讯软件,iOS苹果开源手机客户端 EntboostChat 发布 1.4.2 版本。 EntboostChat 是 iOS开源企业IM,免费企业即时通讯。 主要更新内容: 兼容IPV6网络 适配IOS10和xcode8开发环境...

akee
2016/10/13
2.5K
1
EntboostChat 1.4 发布,iOS开源IM,免费即时通讯

恩布互联企业IM iOS 苹果开源手机客户端 EntboostChat 发布 1.4 版本,iOS开源IM,免费企业即时通讯; 主要更新内容: 增加当前用户修改密码功能,修改聊天设置 增加复制、粘贴聊天内容功能,...

akee
2016/02/24
2.4K
8
恩布企业 IM iOS 客户端 0.9.6,服务端 1.11 发布

恩布企业IM,免费企业即时通讯,企业内部通讯平台,iOS苹果开源手机客户端EntboostChat发布0.9.6版本,同时服务更新至1.11版本; iOS苹果手机端主要更新内容: 优化个人默认头像图标显示逻辑 ...

akee
2015/02/11
1K
0
极光开发者沙龙 JIGUANG MEETUP——iOS 技术综合实践

活动背景 相信各位 iOSer 已经在 WWDC 结束后亲身体验过相关的技术。今年 WWDC 后,开发者们要适配的工作并不像以前那么繁重,在各大论坛中也可以搜到相关的技术实战分享。但因为每个公司的技...

极光推送
2017/10/24
0
0
恩布企业 IM 的 iOS 客户端发布 0.9.5 版本

注意:恩布企业 IM 的服务器端是不开源的,客户端是开源的! 恩布企业 IM 的 iOS 苹果开源手机客户端 EntboostChat 发布 v0.9.5 版本; 全新UI设计界面,稳定性增强版本;0.9.1至0.9.5版本更新...

akee
2015/01/07
4K
46

没有更多内容

加载失败,请刷新页面

加载更多

Storm+Hbase广告实时统计

本文主要讲述使用Kafka+Strom+Hbase搭建的一套广告实时计算系统。其中服务器显示使用的是SpringBoot+Vue+ElementUI+EChats. 主要内容: 1.需求 2.日志格式 3.Hbase表格设计 4.编写Storm程序 ...

飓风2000
4分钟前
0
0
android,ContentProvider+ContentObserver+ContentResolver,用法。

这个是传智播客老师讲android开发时的一个图。 一、 PersonProvider继承ContentProvider,实现ContentProvider中的数据操作类。 ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起...

天王盖地虎626
10分钟前
0
0
解决markdown中的不换行问题

没有解决我的格式显示问题 https://blog.csdn.net/qq_23483671/article/details/79017609

南桥北木
15分钟前
0
0
产品上新|ZStack3.5.0正式发布啦!

海量产品资料传送门~ 一、ZStack全线产品下载通道汇总 社区版(免费): https://www.zstack.io/product/zstack_open_source/ 企业版下载: https://www.zstack.io/product/zstack_enterpris...

ZStack社区版
17分钟前
0
0
mysql 大表分页查询 翻页 优化方案

mysql分页查询是先查询出来所有数据,然后跳过offset,取limit条记录,造成了越往后的页数,查询时间越长 一般优化思路是转换offset,让offset尽可能的小,最好能每次查询都是第一页,也就是...

花树堆雪
21分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部