开发者社区> 吞吞吐吐的> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
iOS开发:城市选择器集成
该项目集成了三种类型的城市选择器: 1、XXCityPickerView 省市区,可以分级:1省 2省-市 3省-市-区 2、SQSelectAddress 省市区乡/镇,页面跳转 3、RattanCityPicker 省市区,包含邮编地址,开放多个属性设置的接口
0 0
iOS一网通支付集成遇到的问题及解决
iOS一网通支付集成遇到的问题及解决
0 0
iOS tweak 集成CocoaAsyncSocket
iOS tweak 集成CocoaAsyncSocket
0 0
iOS集成下拉刷新控件 & 实现无感知上拉加载更多
iOS集成下拉刷新控件 & 实现无感知上拉加载更多
0 0
产品百科 |iOS 端如何快速集成 RTC SDK
本文为您介绍了 iOS 端集成 SDK 操作,帮助您快速集成 SDK 并能使用音视频通信基本功能。
0 0
视频点播IOS播放器SDK Swift集成和实现
通过Swift 集成和实现阿里视频点播IOS播放器SDK的介绍
0 0
搞定iOS推送SDK集成,看这篇文章就够了!
一次偶然的机会,公司的项目要用到推送,我自己本来就很懒,不愿意去弄整套APNS的流程,刚好之前跟朋友聊起过他们的产品中集成了个推的Android推送,说是体验还可以,那这次我就试一下他们的iOS推送。
2438 0
react native 百度统计 ios端集成
react native 百度统计Android端的集成可参考:https://www.jianshu.com/p/cc354c6a81d5 希望能够让同学们少走些弯路。
1492 0
react native 友盟统计 IOS 端集成
react native 友盟统计的Android端集成可参考 :https://www.jianshu.com/p/1c41d4b66312 希望大家少走些弯路吧。
2229 0
环信 3.0 iOS 客户端的集成
环信3.0ios客户端的集成(一)环信3.0ios客户端的集成(二)环信3.0ios客户端的集成(三)环信3.0ios客户端的集成(四)环信3.0ios客户端的集成(五)环信3.
628 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Facebook iOS App技术演化十年之路
立即下载
From Java_Android to Swift iOS
立即下载
深入剖析 iOS 性能优化
立即下载