美文网首页
融云即时通讯的集成(一)

融云即时通讯的集成(一)

作者: 这个姑凉儿 | 来源:发表于2018-11-08 16:54 被阅读0次

项目中一直用到融云的即时通讯,终于忙过那阵,总结一下😊

  1. 前期的准备
    • 注册开发者账号
    • 下载sdk
    • 创建应用
  2. sdk的集成
  • 在此推荐 使用CocoaPods导入SDK(如果喜欢手动带入依赖库和包的请参考官方文档)
    在您的工程根目录下新建一个 Podfile 文件,或者用终端,在工程目录下,执行 pod init。然后 open -e Podfile。在文件中输入以下内容。(在此以 2.8.3 版本为例,其中 “MyApp” 为自己工程名)
target 'MyApp' do
   pod 'RongCloudIM/IMLib', '~> 2.8.3'
   pod 'RongCloudIM/IMKit', '~> 2.8.3'  
end

  • 然后在终端中运行以下命令:
pod instal

完成后,CocoaPods 会在您的工程根目录下生成一个.xcworkspace 文件。您需要通过此文件打开您的工程,而不是之前的 .xcodeproj。打开工程编译一下,如果没有报错恭喜你集成成功了。

  1. 代码集成
  • 在您需要使用融云 SDK 功能的类中,import 相关头文件。
#import <RongIMKit/RongIMKit.h>
  • 请使用您之前从融云开发者控制台注册得到的 App Key,通过 RCIM 的单例,传入 initWithAppKey:方法,初始化 SDK
    您在使用融云 SDK 所有功能(包括显示 SDK中的View 或者显示继承于 SDKView )之前,您必须先调用此方法初始化 SDK。 在 App 的整个生命周期中,您只需要将 SDK 初始化一次。
[[RCIM sharedRCIM] initWithAppKey:@"YourTestAppKey"];
  • 获取融云的token,这个token需要服务器端集成融云请求token,给app端返回,融云的强制要求。
  • 拿到token以后连接融云的服务器
[[RCIM sharedRCIM] connectWithToken:@"YourTestUserToken"     success:^(NSString *userId) {
   NSLog(@"登陆成功。当前登录的用户ID:%@", userId);
} error:^(RCConnectErrorCode status) {
   NSLog(@"登陆的错误码为:%d", status);
} tokenIncorrect:^{
   //token过期或者不正确。
   //如果设置了token有效期并且token过期,请重新请求您的服务器获取新的token
   //如果没有设置token有效期却提示token错误,请检查您客户端和服务器的appkey是否匹配,还有检查您获取token的流程。
   NSLog(@"token错误");
}];
  • 登录成功后设置当前用户的用户信息,用于SDK显示和发送
//可以让自己的后台返回名字头像id,这些,然后传给融云
RCUserInfo *user = [[RCUserInfo alloc]init];
user.userId = USERID; 
user.name = RongYunName;
user.portraitUri = PortraitUri;
[RCIM sharedRCIM].currentUserInfo = user;
[RCIM sharedRCIM].userInfoDataSource = self;
[RCIM sharedRCIM].receiveMessageDelegate = self;
[RCIM sharedRCIM].connectionStatusDelegate = self;
  • 初始化会话列表界面并显示
    • 新建一个控制器继承融云的RCConversationListViewController
#import <RongIMKit/RongIMKit.h>

@interface ChatMainController : RCConversationListViewController

@end
//在.m里重写下面的方法
//重写RCConversationListViewController的onSelectedTableRow事件

/**
 *  点击进入会话页面
 *
 *  @param conversationModelType 会话类型
 *  @param model                 会话数据
 *  @param indexPath             indexPath description
 */
- (void)onSelectedTableRow:(RCConversationModelType)conversationModelType
         conversationModel:(RCConversationModel *)model
               atIndexPath:(NSIndexPath *)indexPath {
    
    if (conversationModelType == RC_CONVERSATION_MODEL_TYPE_NORMAL) {
        //新建一个聊天会话View Controller对象,建议这样初始化
        ZJChatViewController *chat = [[ZJChatViewController alloc] initWithConversationType:ConversationType_PRIVATE targetId:model.targetId];
        //设置聊天会话界面要显示的标题
        chat.title = model.conversationTitle;
        //显示聊天会话界面
        [self.navigationController pushViewController:chat animated:YES];
    }

}
  • ZJChatViewController继承 RCConversationViewController 这个是聊天页面
#import <RongIMKit/RongIMKit.h>

@interface ZJChatViewController : RCConversationViewController


@end

发送消息的方法

- (RCMessageContent *)willSendMessage:(RCMessageContent *)messageContent {
    RCUserInfo * senderUserInfo = [[RCUserInfo alloc] init];
    senderUserInfo.userId = USERID;
    senderUserInfo.name = RongYunName;
    senderUserInfo.portraitUri = PortraitUri;
    messageContent.senderUserInfo = senderUserInfo;
    return messageContent;
}

接收消息的方法我放在了AppDelegate

- (void)onRCIMReceiveMessage:(RCMessage *)message left:(int)left {
    RCMessageContent * messageContent = message.content;
    [[RCIM sharedRCIM] refreshUserInfoCache:messageContent.senderUserInfo withUserId:message.senderUserId];
    RCUserInfo * senderUserInfo = messageContent.senderUserInfo;
    if (senderUserInfo != nil) {
        NSDictionary * dic = @{@"userId" : senderUserInfo.userId,
                               @"name" : senderUserInfo.name,
                               @"portraitUri" : senderUserInfo.portraitUri
                               };
//存储信息
        if (![[ZJRCUserInfoManager sharedManager] isBookExistsForKey:message.senderUserId]) {
            [[ZJRCUserInfoManager sharedManager] writePlist:dic forKey:message.senderUserId];
        } else {
            [[ZJRCUserInfoManager sharedManager] replaceDictionary:dic withDictionaryKey:message.senderUserId];
        }
    }
    
}

融云链接状态的监听

- (void)onRCIMConnectionStatusChanged:(RCConnectionStatus)status {
    switch (status) {
        case ConnectionStatus_KICKED_OFFLINE_BY_OTHER_CLIENT: {           // 被踢下线
            [SVProgressHUD showInfoWithStatus:@"此账号已在其他设备登录,请重新登录"];
            
            break;
        }
        default:
            break;
    }
}

到此,就完成了融云的基本聊天。
下篇进行融云的扩展功能:自定义消息,客服的功能

(如有不足,请及时指出,虚心接受😊)

相关文章

  • iOS 集成融云即时通讯出现的问题

    前段时间一个项目需要集成聊天功能,市面上的第三方即时通讯很多,有环信、融云等等,而我这里集成的是融云即时通讯,在集...

  • 关于集成融云的时候遇到的一些问题

    由于项目中需要集成融云的客服,进入融云官网SDK 快速入门 - 融云即时通讯技术文档_基础服务开发指南 根...

  • iOS开发如何测试生产环境的远程推送功能

    极光推送&融云消息推送 首先说一下我们项目用的是极光推送,还有一个集成融云即时通讯自带的融云推送。 在Debug模...

  • 融云IM iOS sdk 集成流程与心得

    融云IM简介 融云的定位是只专注即时通讯的消息发送功能,融云服务器不会维护用户的好友关系及群组关系,这就需要集成的...

  • ios开发集成融云SDK心得

    融云IM简介 融云的定位是只专注即时通讯的消息发送功能,融云服务器不会维护用户的好友关系及群组关系,这就需要集成的...

  • 融云即时通讯集成

    前期准备 注册开发者帐号 开发者在集成融云即时通讯、实时网络能力前,需前往融云官方网站注册创建融云开发者帐号。 得...

  • 融云即时通讯的集成(一)

    项目中一直用到融云的即时通讯,终于忙过那阵,总结一下? 前期的准备注册开发者账号下载sdk创建应用 sdk的集成 ...

  • Paper Collection - Instant Messa

    介绍融云SDK即时通讯机制和集成步骤(有代码,和文章,有封装) xmpp系列三篇文章(一个博客)

  • git上传文件大小超限

    最近在做集成融云IM即时通讯功能时,git push提交代码更新时遇到了错误提示:remote: error: F...

  • 集成融云即时通讯(Swift)

    1、cocoapod集成 2、桥接文件导入 3、设置appkey、属性、代理 4、代理方法 5、上面这些集成基本上...

网友评论

      本文标题:融云即时通讯的集成(一)

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