iOS:融云即时通讯快速集成

简介:

一、介绍

   即时通讯在众多社交软件、生活软件以及教育软件中已经是必备的功能了,在当前国内,即时通讯SDK做的比较不错的有那么几家,例如环信SDK、融云SDK...,这两家做的都很不错,各有千秋吧,要是真让说出个不同,就我个人感觉融云的集成要更简单一些,就那么几步,有点开发基础都会,我之前在项目中集成过环信,解决了不少的坑才集成好。他们共同的特点就是,都只负责进行聊天,不管理好友之间的关系和用户的信息,它们都是在代理方法中设置用户的信息,包括姓名、昵称、头像等,环信中是通过IMessageModel模型直接设置,融云则是通过将RCUserInfo模型作为block的参数进行回调设置。

如果需要集成环信,可以看看我的集成过程:http://www.cnblogs.com/XYQ-208910/p/5396635.html

 

二、准备

(1)注册融云开发者账号:https://developer.rongcloud.cn/signup

(2)登录账号,在控制台创建应用获取AppKey和AppScrete

(3)找到调试API接口,手动获取token(这个融云最终要求是开发者从自己的服务器获取),此处只是在为开发环境测试所用

(4)在plist设置iOS9需要的https网络请求字段NAAppTransportSecurity

(5)如果对界面没有更高的定制要求,融云本身提供的所有聊天等界面已经足够使用,此时集成IMKit框架使用即可,推荐使用CocoaPods自动集成

 

三、集成 

(1)生成Podfile文件,选择IM框架

platform :ios, '8.0'
target 'RongCloudKit' do
    pod 'RongCloudIM/IMLib', '2.8.0' //需要自己去定制UI界面
    pod 'RongCloudIM/IMKit', '2.8.0' //融云提供完善的UI界面
end

(2)安装后导入头文件即可使用

 

四、使用(RCIM是一个单例类,几乎很多重要的操作都是由这个类来完成的)

 (1)注册融云APPKey

//注册融云APPKEY
[[RCIM sharedRCIM] initWithAppKey:APPKEY];

 (2)登录融云服务器

复制代码
//使用手动生成的token连接融云服务器进行登录
    [[RCIM sharedRCIM] connectWithToken:TOKEN success:^(NSString *userId) {
        NSLog(@"登陆成功。当前登录的用户ID:%@", userId);
        
    } error:^(RCConnectErrorCode status) {
        NSLog(@"登陆的错误码为:%ld", status);
    } tokenIncorrect:^{
        //token过期或者不正确。
        //如果设置了token有效期并且token过期,请重新请求您的服务器获取新的token
        //如果没有设置token有效期却提示token错误,请检查您客户端和服务器的appkey是否匹配,还有检查您获取token的流程。
        NSLog(@"token错误");
    }];
复制代码

 (3)显示聊天界面代码如下(此处我继承了原生会话类RCConversationViewController)

复制代码
//  RongCloudConversationViewController.h
//  RongCloudKit
//
//  Created by 夏远全 on 16/12/17.
//  Copyright © 2016年 广州市东德网络科技有限公司. All rights reserved.
//

#import <RongIMKit/RongIMKit.h>

@interface SystemConversationViewController : RCConversationViewController

@end
复制代码
复制代码
//  RongCloudConversationViewController.m
//  RongCloudKit
//
//  Created by 夏远全 on 16/12/17.
//  Copyright © 2016年 广州市东德网络科技有限公司. All rights reserved.
//

#import "SystemConversationViewController.h"

@interface SystemConversationViewController ()<RCIMUserInfoDataSource>

@end

@implementation SystemConversationViewController

-(instancetype)init{
    self = [super init];
    
    //设置会话的类型,如单聊、讨论组、群聊、聊天室、客服、公众服务会话等
    self.conversationType = ConversationType_PRIVATE;
    
    //设置会话的目标会话ID。(单聊、客服、公众服务会话为对方的ID,讨论组、群聊、聊天室为会话的ID)
    self.targetId = OTHERID;
    
    //设置聊天会话界面要显示的标题
    self.title = OTHERID;
    
    return self;
}

-(void)viewDidLoad{
    [super viewDidLoad];
    
    //用户信息提供者
    [RCIM sharedRCIM].userInfoDataSource = self;

}


#pragma mark - <RCIMUserInfoDataSource>
/*!
 获取用户信息
 @param userId      用户ID
 @param completion  获取用户信息完成之后需要执行的Block [userInfo:该用户ID对应的用户信息]
 @discussion SDK通过此方法获取用户信息并显示,请在completion中返回该用户ID对应的用户信息。
 在您设置了用户信息提供者之后,SDK在需要显示用户信息的时候,会调用此方法,向您请求用户信息用于显示。
 */
-(void)getUserInfoWithUserId:(NSString *)userId completion:(void (^)(RCUserInfo *))completion
{
    //设置用户信息
    NSString *avatarURL = @"http://xxxxxx.com/static/avatar/137180371639017.jpeg";
    RCUserInfo *userInfo = [[RCUserInfo alloc] initWithUserId:userId name:userId portrait:avatarURL];
    
    //block回调设置用户信息
    completion(userInfo);
}

@end
复制代码
复制代码
//聊天界面
-(void)conversationStart{
    
    //新建一个聊天会话View Controller对象、显示聊天会话界面
    SystemConversationViewController *chat = [[SystemConversationViewController alloc]init];
    [self.navigationController pushViewController:chat animated:YES];
}
复制代码

 (4)显示会话列表界面代码如下(此处我继承了原生会话列表类RCConversationListViewController)

复制代码
//  ConversationListViewController.h
//  RongCloudKit
//
//  Created by 夏远全 on 16/12/17.
//  Copyright © 2016年 广州市东德网络科技有限公司. All rights reserved.
//

#import <RongIMKit/RongIMKit.h>

@interface SystemConversationListViewController : RCConversationListViewController

@end
复制代码
复制代码
//  ConversationListViewController.m
//  RongCloudKit
//
//  Created by 夏远全 on 16/12/17.
//  Copyright © 2016年 广州市东德网络科技有限公司. All rights reserved.
//

#import "SystemConversationListViewController.h"
#import "SystemConversationViewController.h"

@interface SystemConversationListViewController ()<RCIMUserInfoDataSource>

@end

@implementation SystemConversationListViewController

- (void)viewDidLoad {
    
    //重写显示相关的接口,必须先调用super,否则会屏蔽SDK默认的处理
    [super viewDidLoad];
    self.conversationListTableView.tableFooterView = [[UIView alloc] init];
    
    //设置需要显示哪些类型的会话
    [self setDisplayConversationTypes:@[@(ConversationType_PRIVATE),
                                        @(ConversationType_DISCUSSION),
                                        @(ConversationType_CHATROOM),
                                        @(ConversationType_GROUP),
                                        @(ConversationType_APPSERVICE),
                                        @(ConversationType_SYSTEM)]];
    
    //设置需要将哪些类型的会话在会话列表中聚合显示
    [self setCollectionConversationType:@[@(ConversationType_DISCUSSION),
                                          @(ConversationType_GROUP)]];
    
    
    //用户信息提供者
    [RCIM sharedRCIM].userInfoDataSource = self;
}

//重写RCConversationListViewController的onSelectedTableRow事件
- (void)onSelectedTableRow:(RCConversationModelType)conversationModelType
         conversationModel:(RCConversationModel *)model
               atIndexPath:(NSIndexPath *)indexPath {
    
    SystemConversationViewController *conversationVC = [[SystemConversationViewController alloc]init];
    conversationVC.conversationType = model.conversationType;
    conversationVC.targetId = model.targetId;
    conversationVC.title = model.targetId;
    [self.navigationController pushViewController:conversationVC animated:YES];
}


#pragma mark - <RCIMUserInfoDataSource>
/*!
 获取用户信息
 @param userId      用户ID
 @param completion  获取用户信息完成之后需要执行的Block [userInfo:该用户ID对应的用户信息]
 @discussion SDK通过此方法获取用户信息并显示,请在completion中返回该用户ID对应的用户信息。
 在您设置了用户信息提供者之后,SDK在需要显示用户信息的时候,会调用此方法,向您请求用户信息用于显示。
 */
-(void)getUserInfoWithUserId:(NSString *)userId completion:(void (^)(RCUserInfo *))completion
{
    //设置用户信息
    NSString *avatarURL = @"http://xxxxxx.com/static/avatar/137180371639017.jpeg";
    RCUserInfo *userInfo = [[RCUserInfo alloc] initWithUserId:userId name:userId portrait:avatarURL];
    
    //block回调设置用户信息
    completion(userInfo);
}

@end
复制代码
复制代码
//会话列表
-(void)chatViewList{
    
    //新建一个会话列表界面类,显示所有的会话联系人
    SystemConversationListViewController *chatList = [[SystemConversationListViewController alloc] init];
    [self.navigationController pushViewController:chatList animated:YES];
}
复制代码

 

五、演示截图

     

        

 

六、提示一下

 融云的开发文档些的相当详细,我这儿写一下纯属闲来无事,自娱自乐,有这方面需要的还是去看官方的文档吧,那文档的详细,厉害了我的哥~~~

  欢迎关注我的博客:http://www.cnblogs.com/XYQ-208910和github:https://github.com/xiayuanquan

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/6195117.html ,如需转载请自行联系原作者
相关文章
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
27 0
|
5月前
|
移动开发 网络协议 安全
基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v8.0版已发布
MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级、高度提炼,一套API优雅支持 UDP 、TCP 、WebSocket 三种协议,支持 iOS、Android、H5、标准Java、小程序、Uniapp,服务端基于Netty编写。
69 0
|
7月前
|
小程序 JavaScript API
支付宝小程序集成mqtt兼容IOS和安卓
支付宝小程序集成mqtt兼容IOS和安卓
135 0
|
7月前
|
iOS开发 开发者 Perl
使用mPaaS iOS通过Pod集成"mPaaS_TinyApp"时遇到了错误
使用mPaaS iOS通过Pod集成"mPaaS_TinyApp"时遇到了错误
86 2
|
8月前
|
API 开发工具 iOS开发
一点就通,社交源码IOS客户端开发集成SDK
所谓SDK,全称是SoftwaredevelopmentKit,翻译成软件开发工具包。SDK用助开发某种软件,今天给大家简单讲解下如何在社交源码IOS客户端上开发集成 SDK。
|
8月前
|
API 开发工具 iOS开发
一点就通,社交源码IOS客户端开发集成SDK
所谓SDK,全称是SoftwaredevelopmentKit,翻译成软件开发工具包。SDK用助开发某种软件,今天给大家简单讲解下如何在社交源码IOS客户端上开发集成 SDK。
|
持续交付 iOS开发 Python
iOS 持续集成
iOS 持续集成,打包到fir.im 或者直接上传到testflight
|
iOS开发
iOS支付宝集成
iOS支付宝集成
281 0
iOS支付宝集成
|
iOS开发
iOS开发:城市选择器集成
该项目集成了三种类型的城市选择器: 1、XXCityPickerView 省市区,可以分级:1省 2省-市 3省-市-区 2、SQSelectAddress 省市区乡/镇,页面跳转 3、RattanCityPicker 省市区,包含邮编地址,开放多个属性设置的接口
341 0
iOS开发:城市选择器集成
|
安全 数据安全/隐私保护 iOS开发
iOS一网通支付集成遇到的问题及解决
iOS一网通支付集成遇到的问题及解决
136 0

热门文章

最新文章