iOS | RongCloud融云使用心得+注意事项

前言

最近项目需要增加即时通讯功能,主要有2大需求 单聊群聊,花了点时间研究了一下,最近项目也集成完毕,在这里总结一下。

简介

融云可以向开发者和企业提供即时通讯和实时音视频通信服务。通过融云平台,开发者不必搭建服务端硬件环境,就可以将即时通讯、实时网络能力快速集成至应用中。消息类型上支持文字表情图片语音视频地理位置红包实时音视频通知消息等消息类型。

一、注册开发者账号_获取AppKey

首先需要进入融云官网 注册开发者账号, 创建自己的应用, 拿到AppKey, AppKey分2个环境 开发环境生产环境 ,根据自己项目需求获取相应环境的AppKey 注:两个环境消息不互通。

二、在AppDelegate中需要进行融云的初始化与配置

 #import <RongIMKit/RongIMKit.h>  导入头文件

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    [[RCIM sharedRCIM]initWithAppKey:RongClour_AppKey];       //  设置app key,初始化 SDK,必须设置
 
    // 以下根据自己项目需求.进行配置
    [RCIM sharedRCIM].enablePersistentUserInfoCache = YES;    //  开启用户信息和群组信息的持久化
    [RCIM sharedRCIM].userInfoDataSource = [RCDRCIMDataSource shareInstance];     //  设置RongCloud用户信息数据源
    [RCIM sharedRCIM].groupInfoDataSource = [RCDRCIMDataSource shareInstance];    //  设置RongCloud群组信息数据源
    [RCIM sharedRCIM].enableMessageAttachUserInfo = YES;      //  是否在发送的所有消息中携带当前登录的用户信息
    [RCIM sharedRCIM].receiveMessageDelegate = self;          //  设置接收消息代理
    [RCIM sharedRCIM].enableTypingStatus =YES;                //  开启输入状态监听
    [RCIM sharedRCIM].showUnkownMessage = YES;                //  设置显示未注册的消息
    [RCIM sharedRCIM].showUnkownMessageNotificaiton = YES;    //  未注册的消息类型是否显示本地通知
    [RCIM sharedRCIM].disableMessageAlertSound = YES;         //  声音提示
    [[RCIM sharedRCIM] setConnectionStatusDelegate:self];     //  设置会话列表头像和会话界面头像
    [[RCIM sharedRCIM] registerMessageType:[RRTCustomFriendMessage class]];   //  注册自定义消息类型
    [RCIM sharedRCIM].globalConversationPortraitSize = CGSizeMake(50, 50);    //  会话列表界面中显示的头像大

    return YES;
}

注:以上配置主要是根据我自己项目需求.还有很多其他配置,大家可以根据自己项目需求进行配置.可参考官方文档.

这里需要注意一下: 2个数据源配置
[RCIM sharedRCIM].userInfoDataSource = [RCDRCIMDataSource shareInstance]// 设置RongCloud用户信息数据源
[RCIM sharedRCIM].groupInfoDataSource = [RCDRCIMDataSource shareInstance] // 设置RongCloud群组信息数据源
这2处是决定 以后 好友信息群组信息展示的重要因素,下面会介绍 这2个数据源的代理方法

三、获取 Token

  • 基本配置设置完毕后.接着需要和融云建立连接了.在建立连接前.需要获取您账号对应的 Token (Token 即用户令牌,相当于您 APP 上当前用户连接融云的身份凭证。)
  • 每个账号都有自己对应的Token ,是需要自己服务器配置的, 通过调用自己服务器接口获取的, 在拿到账号对应的Token之后,就可以进行融云连接了.代码如下:
/** 融云连接 */
- (void)rongCloudConnect{
   
    NSString * ImToken = “根据服务器接口获取”
    [[RCIM sharedRCIM]connectWithToken:ImToken success:^(NSString *userId) {
        //  连接成功后.融云会返回 用户的UserId,并创建RCUserInfo
        RCUserInfo *currentUserInfo = [[RCUserInfo alloc]initWithUserId:userId name:”昵称” portrait:@“头像地址”];
       //  告诉融云当前登录用户的基本信息,账号Id,头像地址,和昵称
        [RCIMClient sharedRCIMClient].currentUserInfo = currentUserInfo;   
        //  同步好友信息,根据项目需求
        [RCDDataSource syncFriendList:^(NSArray *friends) {}];   
       //  同步群组信息,,根据项目需求
        [RCDDataSource syncGroups];                     
        
    } error:^(RCConnectErrorCode status) {
        NSLog(@"rongcloud连接错误%ld",(long)status);
    } tokenIncorrect:^{
        NSLog(@"token错误或者过期");
    }];
}

做完以上操作, 和融云的连接,就算建立完成了.

补充一下: 如果前期后台服务器没有集成融云, 还获取不到账号对应的Token 自己可以 去融云官网,在自己的应用中获取 调试Token,如下图

image.png

image.png

选择获取Token,输入UserIdName点击提交,即可获取账号对应的Token,用来测试.

四 、会话列表&&会话详情页面

融云成功建立连接之后, 好友如果发来消息,接下来就是如何展示 会话列表会话详情页面了 融云提供了2个 类

  • RCConversationListViewController // 会话列表
  • RCConversationViewController // 会话详情页面
4.1 会话列表

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

viewDidLoad 中设置需要显示的会话类型,需要将哪些类型的会话聚合显示。

- (void)viewDidLoad {
    [super viewDidLoad];

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

以上代码实现了.可以实现基本的聊天列表显示,.如果有好友消息进来,会在 会话列表显示 聊天信息了,如图:

111.jpg

4.2会话详情页面

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

如下面的例子,创建一个 RCConversationViewController 对象并设置好会话类型、目标会话 ID,显示即可进行聊天。

/** 点击进入会话界面 */
-(void)onSelectedTableRow:(RCConversationModelType)conversationModelType conversationModel:(RCConversationModel *)model atIndexPath:(NSIndexPath *)indexPath{

    //在这个方法中需要用到 聊天界面类  RCConversationViewController
    RCConversationViewController *chat = [RCConversationViewController alloc] initWithConversationType:conversationType  targetId:targetId];
    //设置会话的类型,如单聊、讨论组、群聊、聊天室、客服、公众服务会话等
    chat.conversationType = ConversationType_PRIVATE;
    //设置会话的目标会话ID。(单聊、客服、公众服务会话为对方的ID,讨论组、群聊、聊天室为会话的ID)
    chat.targetId = @"targetIdYouWillChatIn";
    //设置聊天会话界面要显示的标题
    chat.title = @"想显示的会话标题";
    //显示聊天会话界面
    [self.navigationController pushViewController:chat animated:YES];
    }
}

五、好友/群组的 头像、昵称、群组名称信息展示异常问题

在集成了以上代码后,如果好友发来信息,可能会发现会话列表用户头像和昵称为空 或者聊天页面用户头像昵称为空,因为融云是不去管理用户的头像以及昵称的,需要自己去维护,融云提供的逻辑图 如下:

image.png


通过上图.可以知道: 好友发来信息后.融云会先从缓存中获取好友的头像及昵称信息 .如果缓存没有 则会调用 代理方法 ,代理设置如下:
[RCIM sharedRCIM].userInfoDataSource = RCDDataSource; // 设置RongCloud用户信息数据源
这就是文章最开始说的,需要设置用户信息数据源,融云会调用改方法,来获取 好友的头像以及昵称信息

/*!
 获取用户信息
 @param userId                      用户ID
 @param completion              获取用户信息完成之后需要执行的Block
 @param userInfo(in completion)  该用户ID对应的用户信息
 @discussion SDK通过此方法获取用户信息并显示,请在completion中返回该用户ID对应的用户信息。
 在您设置了用户信息提供者之后,SDK在需要显示用户信息的时候,会调用此方法,向您请求用户信息用于显示。
 */
- (void)getUserInfoWithUserId:(NSString *)userId
                   completion:(void (^)(RCUserInfo *userInfo))completion;

如果群组头像和群名称不显示.通上.需要实现如下数据源方法:

/*!
 获取群组信息

 @param groupId                     群组ID
 @param completion                  获取群组信息完成之后需要执行的Block
 @param groupInfo(in completion)    该群组ID对应的群组信息
 @discussion SDK通过此方法获取用户信息并显示,请在completion的block中返回该用户ID对应的用户信息。
 在您设置了用户信息提供者之后,SDK在需要显示用户信息的时候,会调用此方法,向您请求用户信息用于显示。
 */
- (void)getGroupInfoWithGroupId:(NSString *)groupId
                     completion:(void (^)(RCGroup *groupInfo))completion;

以上操作都执行完毕, 好友和群组的聊天就基本都实现了.头像和昵称也可以正常显示了

六、应用内部业务逻辑

最后说一下 好友的申请、同意、删除、以及群组的创建、删除、添加成员等业务逻辑操作 融云是不处理的.需要自己服务器提供接口,自己来维护和管理了.融云只是提供一个通讯的功能.
:一些添加好友,或者一些系统消息,服务器可以通过融云平台来消息推送

以上总结会有不完善的地方.大家也可以参考官方开发文档进行集成!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,652评论 0 15
  • 一、iOS 直播聊天室 Demo 说明 1、源码结构 2、AppDelegate 在 AppDelegate 中初...
    ajiao焦阅读 2,808评论 2 7
  • 经信局在办公楼一层,光线不好。会议室也是办公室。过去的时候,地上的水还未干,水泥地,刚扫过。一个男干事告诉每个来开...
    陈锦辉阅读 176评论 0 0
  • 真正的18号,笑cry 又是一个废掉的周日 没有去图书馆,没有准时起床,没有完成论文。 废喵 有点自责 对不起,我...
    却篱阅读 139评论 0 0