ios--融云即时通讯

前言:

对于iOS开发,目前比较流行的即时通信有:融云、环信、网易云信,都是不错的选择。由于工作需求,笔者粗略的学习了一下融云即时通讯。下面就简单的总结一下如何集成单聊的聊天界面。


简介:

融云是国内首家专业的即时通讯云服务提供商,专注为互联网、移动互联网开发者提供免费的即时通讯基础能力和云端服务。通过融云平台,开发者不必搭建服务端硬件环境,就可以将即时通讯、实时网络能力快速集成至应用中。

融云 SDK 包括两部分:IM 界面组件和 IM 通讯能力库。

IM 界面组件 - IMKit

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

IM 通讯能力库 - IMLib

IMLib 是不含界面的基础 IM 通讯能力库,封装了通信能力和会话、消息等对象。引用到 App 工程中后,需要开发者自己实现 UI 界面,相对较轻量,适用于对 UI 有较高订制需求的开发者。


前期准备:

建议先浏览融云SDK开发文档: http://www.rongcloud.cn/docs/ios.html, 因为里面讲的很详细

一.注册开发者账号  http://www.rongcloud.cn

二.创建应用,创建完应用之后,在你的应用中,会自动创建两套的环境,即:开发环境和生产环境。同时你会获得App Key 和App Secret,它们是融云 SDK 连接服务器所必须的标识,每一个 App 对应一套 App Key 和 Secret。

三.下载与导入SDK,有两种方式可选(推荐使用CocoaPods安装SDK,因为可极大简化安装过程) 
1.使用CocoaPods导入融云SDK,这里就不再赘述,自行百度,很简单的。 
2.手动导入融云SDK,你可以到融云官方网站下载融云SDK http://www.rongcloud.cn/downloads

注意:如果你使用 IMKit,您需要将所有的文件导入您的工程中; 如果您使用 IMLib,您需要导入除 RongIMKit.framework 和 RongCloud.bundle 之外的所有文件。



代码编写:

1.初始化SDK(在AppDelegate.m方法中引入SDK以及注册应用)

#import <RongIMKit/RongIMKit.h>
#define kRongCloudKey @"bmdehs6pdbp3s" //你注册应用的App Key
[[RCIM sharedRCIM] initWithAppKey:kRongCloudKey];
 
 
  • 1
  • 2
  • 3

2.获取Token值

Token 即用户令牌,相当于您 APP 上当前用户连接融云的身份凭证。在您连接融云服务器之前,您需要请求您的 App Server,您的 App Server通过Server API 获取 Token 并返回给您的客户端,客户端获取到这个 Token 即可进入下一步连接融云服务器。

为什么必须在服务器端请求 Token,客户端不提供获取 Token的接口? 

因为获取 Token 时需要提供 App Key 和 App Secret。如果在客户端请求 Token,假如您的 App 代码一旦被反编译,则会导致您的 App Key和App Secret 泄露。所以,务必在您的服务器端获取 Token。

我们在开发者控制台提供了 API 调试的功能,在开发初期阶段,您可以通过其中获取 Token 功能,手动获取 Token 进行测试。

3.连接服务器

将您在上一步获取到的 Token,通过 RCIM 的单例,传入 -connectWithToken:success:error:tokenIncorrect: 方法,即可建立与服务器的连接。

    //获取Token值
    NSString *token1 = @"获取的第一组的token";

    //连接服务器
    [[RCIM sharedRCIM] connectWithToken:token1 success:^(NSString *userId) {

        NSLog(@"登录成功。当前登录的用户ID:%@",userId);

        [[NSUserDefaults standardUserDefaults] setObject:userId forKey:@"userId"];
        [[NSUserDefaults standardUserDefaults] synchronize];

    } error:^(RCConnectErrorCode status) {

        NSLog(@"登录的错误码为:%ld",status);

    } tokenIncorrect:^{

        //token过期或者不正确。
        //如果设置了token有效期并且token过期,请重新请求您的服务器获取新的token
        //如果没有设置token有效期却提示token错误,请检查您客户端和服务器的appkey是否匹配,还有检查您获取token的流程。
        NSLog(@"token错误");
    }];
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

4.启动聊天界面

融云 IMKit 中已经实现了完整的聊天界面,包含发送、接收、更新等 UI,并覆盖常用的IM交互场景,您直接使用或继承 RCConversationViewController,即可快速启动和使用聊天界面。

添加一个启动聊天按钮,直接调起单聊界面

- (IBAction)xiaoming:(id)sender {
    //新建一个聊天会话View Controller对象
    RCConversationViewController *chat = [[RCConversationViewController alloc] init];
    //设置会话的类型,如单聊、讨论组、群聊、聊天室、客服、公众服务会话等
    chat.conversationType = ConversationType_PRIVATE;
    //设置会话的目标会话ID。(单聊、客服、公众服务会话为对方的ID,讨论组、群聊、聊天室为会话的ID)
    chat.targetId = @"获取第二组的用户id";//实现两个账号间通信
    //设置聊天会话界面要显示的标题
    chat.title = @"会话标题";
    //显示聊天会话界面
    [self.navigationController pushViewController:chat animated:YES];
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

5.启动会话列表界面

融云 IMKit 已经实现了一个默认的会话列表视图控制器,你直接使用或继承 RCConversationListViewController,即可快速启动和使用会话列表界面。

首先新建一个TestChatViewController的类,继承于RCConversationListViewController,在viewDidLoad中设置需要显示的会话类型,需要将哪些类型的会话聚合显示。

//TestChatViewController.h
#import <RongIMKit/RongIMKit.h>

@interface TestChatViewController : RCConversationListViewController

@end

//TestChatViewController.m

#import "TestChatViewController.h"

@interface TestChatViewController ()

@end

@implementation TestChatViewController

- (void)viewDidLoad {

    //重写显示相关的接口,必须先调用super,否则会屏蔽SDK默认的处理
    [super viewDidLoad];

     //聚合显示指的是此类型所有会话,在会话列表中聚合显示成一条消息,点击进去会再显示此类型的具体会话列表
    //设置需要显示哪些类型的会话
    [self setDisplayConversationTypes:@[@(ConversationType_PRIVATE),
                                        @(ConversationType_DISCUSSION),
                                        @(ConversationType_CHATROOM),
                                        @(ConversationType_GROUP),
                                        @(ConversationType_APPSERVICE),
                                        @(ConversationType_SYSTEM)]];

    //设置需要将哪些类型的会话在会话列表中聚合显示
    [self setCollectionConversationType:@[@(ConversationType_DISCUSSION),
                                          @(ConversationType_GROUP)]];

}

/**
 *重写RCConversationListViewController的onSelectedTableRow事件
 *
 *  @param conversationModelType 数据模型类型
 *  @param model                 数据模型
 *  @param indexPath             索引
 */

//在你的会话列表中加入以下代码,即可点击进入聊天会话界面。
-(void)onSelectedTableRow:(RCConversationModelType)conversationModelType conversationModel:(RCConversationModel *)model atIndexPath:(NSIndexPath *)indexPath{

    RCConversationViewController *conversationVC = [[RCConversationViewController alloc] init];

    conversationVC.conversationType = ConversationType_PRIVATE;

    conversationVC.targetId = model.targetId;

    conversationVC.title = @"会话标题";

    [self.navigationController pushViewController:conversationVC animated:YES];

}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59

然后初始化会话列表并显示

TestChatViewController *chatList = [[TestChatViewController alloc] init];
[self.navigationController pushViewController:chatList animated:YES];
 
 
  • 1
  • 2

尾巴:

以上就是实现单聊的聊天界面和会话列表界面的全部内容,你只需要在模拟器上运行一遍,更换token值和UserId,再次运行在真机上,就可实现真机与模拟器间即时通讯。 
最后补充一点:如果你的融云账号创建的项目 是很久之前的, 一直没使用, 那融云会默认 APP Key 失效, 无法在API调试中 获取到token.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值