IOS-IM即时通讯

###一.概述

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

转载于:https://my.oschina.net/tiankongmichael/blog/750925

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值