美文网首页iOS 干货整理
[iOS] RongCloud融云使用心得+注意事项

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

作者: Leon_520 | 来源:发表于2017-01-13 18:08 被阅读984次

前言

最近项目需要增加即时通讯功能,主要有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,如下图

Pasted Graphic.png
Pasted Graphic 3.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];
    }
}

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

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

Pasted Graphic 4.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;

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

六、应用内部业务逻辑

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

以上总结会有不完善的地方.大家也可以参考官方开发文档进行集成!

相关文章

网友评论

    本文标题:[iOS] RongCloud融云使用心得+注意事项

    本文链接:https://www.haomeiwen.com/subject/rbksbttx.html