链接:https://www.jianshu.com/p/eabfb0a93cf9

相信大家在项目中会用到即时通讯功能,自己去写的话会需要前后台合作,会大大加大开发的周期,所以考虑使用第三方的即时通讯平台,比如现在有融云,环信....等等等!楼主在项目开发过程中使用到过环信和融云,今天就为大家写下IOS端集成环信的方法和可能会遇到的问题。(融云提供聊天会话列表和聊天界面并且允许我们自定义,所以很方便的)。

一:准备工作
1.首先打开融云官网http://www.rongcloud.cn/,注册自己的账户,并登陆。
2.点击左边创建应用,在打开的小窗口填写你的项目的一些信息(如果正在开发阶段可以选择未运营商务用户,如果项目上线后是需要提交申请审核,后面再讲)。

Paste_Image.png

3.创建好项目过后点击刚刚创建好的项目,并点击左边的"App Key",里面包含开发环境和生产环境,不同环境下的App Key是不一样的,融云基本是免费的,但是他会提供给你一些付费的服务(视自己项目而定)。记录好App Key,因为在后面工程中需要。融云开发环境允许100个测试用户,如果超过了100个测试用户,需要在后台手动添加用户,一次只能添加20个。
4.导入SDK到项目(需要什么功能就导入哪一个sdk模块,楼主只需要简单的聊天功能加聊天界面,所以导入融云 IM 通讯能力库 - RongCloudIM/IMLib
融云 IM 界面组件 - RongCloudIM/IMKit),融云支持下载到本地手动导入,还有一种方式就是使用cocoapods导入,个人觉得使用cocapods导入是最方便的。cocoapods的简介和使用方法转自:http://www.jianshu.com/p/b64b4fd08d3c。
5.添加依赖库,Xcode点击左侧项目名 - Build Phases - Link Binary With Libraies 点击下面的加号添加下图的依赖库(Xcode7.0以上版本,相信没人还会用Xcode7.0以下的版本做开发吧!)。
融云依赖库:

Paste_Image.png

系统依赖库:

AssetsLibrary.framework
AudioToolbox.framework
AVFoundation.framework
CFNetwork.framework
CoreAudio.framework
CoreGraphics.framework
CoreLocation.framework
CoreMedia.framework
CoreTelephony.framework
CoreVideo.framework
ImageIO.framework
libc++.tbd
libc++abi.tbd
libsqlite3.tbd
libstdc++.tbd
libxml2.tbd
libz.tbd
MapKit.framework
OpenGLES.framework
QuartzCore.framework
SystemConfiguration.framework
UIKit.framework
Photos.framework
SafariServices.framework

添加完成依赖库后记得需要在 Xcode 项目 Build Settings - Other Linker Flags 中,点击下方加号,增加 "-ObjC"。
如果上面的步骤都已经做完了,可以试着编译以下自己项目,看会不会报错(如果有报错记得留言,我也会为尽我的努力为大家解答),准备工作就到这里了,下面我们开始集成。

二:开始集成回话列表
1.打开工程在Appdelegate里面连接融云服务器,使用融云开发者控制台注册得到的 App Key,通过 RCIM 的单例,传入 initWithAppKey:方法,初始化 SDK。在使用融云 SDK 所有功能(包括显示 SDK 中的 View 或者显示继承于 SDK 的 View )之前,您必须先调用此方法初始化 SDK。 在 App 的整个生命周期中,您只需要将 SDK 初始化一次。

[[RCIM sharedRCIM] initWithAppKey:@"后台应用的AppKey"];

2.连接融云服务器。

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

连接融云服务器的时候需要传给融云服务器一个token,相当于登录融云的一个"用户名",这个"用户名"是你们后台服务器集成的事情,所以你不用管,到时候后台会在你需要的地方返回给你这个token。在测试的时候需要我们在融云控制台获取一个测试的token,用来登录。方法如下

image.png

将token后面的复制下来。
贴上Appdelegate代码

#import "AppDelegate.h"
#import <RongIMLib/RongIMLib.h>
#import <RongIMKit/RongIMKit.h>@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch.//初始化融云SDK[[RCIM sharedRCIM] initWithAppKey:@"6tnym1br65di7"];//登录融云服务器[[RCIM sharedRCIM] connectWithToken:@"0ABt7ILPEShS9stGR+AJgN3bHoP4ztV1ORxxRULm/FLmvyxeqth6/QrQGCuRGPBUkOFQ2cmYVi9C+B2yuDZfcA=="     success:^(NSString *userId) {NSLog(@"登陆成功。当前登录的用户ID:%@", userId);} error:^(RCConnectErrorCode status) {NSLog(@"登陆的错误码为:%ld", (long)status);} tokenIncorrect:^{//token过期或者不正确。//如果设置了token有效期并且token过期,请重新请求您的服务器获取新的token//如果没有设置token有效期却提示token错误,请检查您客户端和服务器的appkey是否匹配,还有检查您获取token的流程。NSLog(@"token错误");}];return YES;
}- (void)applicationWillResignActive:(UIApplication *)application {// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.// Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
}- (void)applicationDidEnterBackground:(UIApplication *)application {// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}- (void)applicationWillEnterForeground:(UIApplication *)application {// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}- (void)applicationDidBecomeActive:(UIApplication *)application {// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}- (void)applicationWillTerminate:(UIApplication *)application {// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}@end

当登录成功后,控制台会打印出

...
登陆成功。当前登录的用户ID:123
...

这是代表你的用户ID为123的账号已经登录到融云服务器成功,现在可以使用融云的服务了。
3.融云 IMKit 已经实现了一个默认的会话列表视图控制器,您直接使用或继承 RCConversationListViewController,即可快速启动和使用会话列表界面。意思是融云已经给你写好了一个回话列表的界面,我们如果对界面的要求不是很高的话,可以直接继承这个ViewController,并且这个ViewController是可以支持界面的一些修改,所以是不是很方便呢。
首先,新建一个类继承自RCConversationListViewController。

image.png

并在.m文件的- (void)viewDidLoad方法中设置需要显示哪些类型的会话以及哪些类型的会话可以在会话列表页面聚合显示。附上.m文件代码

#import "MyselfListViewController.h"@interface MyselfListViewController ()@end@implementation MyselfListViewController- (void)viewDidLoad {[super viewDidLoad];//设置需要显示哪些类型的会话,由于楼主只需要单聊功能,所以只设置ConversationType_PRIVATE[self setDisplayConversationTypes:@[@(ConversationType_PRIVATE),]];//设置需要将哪些类型的会话在会话列表中聚合显示[self setCollectionConversationType:@[@(ConversationType_PRIVATE),]];}- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];
}

这样一个回话列表界面就已经集成完成,我们可以在融云控制着后台发送一条测试消息,看一下回话列表能不能收到消息。

image.png

这样你的会话列表就会收到一条消息。

image.png

这时候你会好奇了,为什么只有消息内容,而没有用户名以及头像呢,这就是融云即时通讯的一个模式,他只负责做消息的转发者,而不会负责管理好友的信息,融云这样说:融云认为,每一个设计良好且功能健全的 App 都应该能够在本地获取、缓存并在合适的时机更新 App 中的用户信息。所以,融云不维护和管理用户基本信息(用户ID、昵称、头像)的获取、缓存、变更和同步。意思是用户的头像用户的名称,全都是保存在自己的服务器,融云只负责管理聊天内容有关的业务,所以现在就有一个问题,如何通过自己的服务器的用户名和头像对应到融云管理的相应的聊天信息呢,我们在后面用到时候在说。

三:开始集成聊天界面
下面我们开始集成聊天界面,融云为我们也准备了一个聊天界面RCConversationViewController,如果项目没有特殊要求,这个聊天界面也能满足我们很项目的需求,当然,融云也是给我们提供进行页面的修改的接口的。
首先新建一个类继承自RCConversationViewController。

image.png

创建好了之后我们需要在继承自RCConversationListViewController的控制器中重写一个方法:- (void)onSelectedTableRow:(RCConversationModelType)conversationModelType
conversationModel:(RCConversationModel *)model
atIndexPath:(NSIndexPath *)indexPath方法,来点击会话列表进入相应的聊天界面,再次贴上继承自RCConversationListViewController的会话列表界面.m实现代码

#import "MyselfListViewController.h"
#import "MyselfConversationController.h"@interface MyselfListViewController ()@end@implementation MyselfListViewController- (void)viewDidLoad {[super viewDidLoad];//设置需要显示哪些类型的会话,由于楼主只需要单聊功能,所以只设置ConversationType_PRIVATE[self setDisplayConversationTypes:@[@(ConversationType_PRIVATE),]];}//重写RCConversationListViewController的onSelectedTableRow事件
- (void)onSelectedTableRow:(RCConversationModelType)conversationModelTypeconversationModel:(RCConversationModel *)modelatIndexPath:(NSIndexPath *)indexPath {MyselfConversationController *conversationVC = [[MyselfConversationController alloc]init];//聊天界面的聊天类型conversationVC.conversationType = model.conversationType;
//需要打开和谁聊天的会话界面,和谁聊天其实是通过TargetId来联系的。conversationVC.targetId = model.targetId;conversationVC.title = @"想显示的会话标题";[self presentViewController:conversationVC animated:YES completion:NULL];
}- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];
}

这样再次运行项目,点击屏幕的一个会话列表,查看聊天界面效果。

image.png

我一直用的[self presentViewController:conversationVC animated:YES completion:NULL];来打开新的页面,所以没有导航栏,也就没有标题栏。

到了这里大致的融云就已经完成。是不是很简单呢。

iOS---集成融云SDK即时通讯相关推荐

  1. 30 分钟集成融云 IM 即时通讯

    最近公司要做一个社交 app,对于时间就是金钱的当今社会,招聘大量人才去搭建通讯系统肯定是不划算的,花费人力物力财力做出来的 app,可能还没人用.那就瞎了.所以毋庸置疑,一拍即合,用第三方的.就开始 ...

  2. 融云发送图片消息_Web 端集成融云 SDK 如何发送正确图片消息给移动端展示?

    Web 端集成融云 SDK 如何发送正确图片消息给移动端展示? 前言 Web 端使用融云的即时通讯 SDK 在发送图片消息给移动端的时候,移动端一般会收到一个缩略图数据和展示高清图片地址,但是往往 W ...

  3. 快速集成融云SDK– Android Studio

    现在很多应用都加入了即时通讯功能(客服等),选择第三方的SDK比较省事快捷,这里就介绍一下集成融云SDK时遇到的一些问题. 这个是官网的集成指南:http://www.rongcloud.cn/doc ...

  4. 融云 web 即时通讯

    融云 web 即时通讯 ☺ 官网https://www.rongcloud.cn/?utm_source=baiduBrand&utm_term=rongyun 老版本但更为详细的开发文档ht ...

  5. 集成融云 SDK 怎么实现多端同步未读数

    最近在集成融云 SDK 的时候,碰到了一个跟未读数有关的问题,现象是这样的: 比如我在其中 Web 端已经清除了某个会话的未读数然后退出,再换个设备登入,这个时候未读数还有,并没有清除掉,我就纳闷了, ...

  6. Android集成阿里云旺即时通讯踩坑历程

    下载云旺的demo,将demo中的OneSDK直接拷贝,作为Moudle进行依赖,具体操作就不说了,OneSDK是最新的,一定不要进行修改, 进行依赖后,可能会遇到buildToolsVersion ...

  7. ios 融云 重写对话列表_iOS集成融云SDK part 1 小记

    之前虽然稍微了解过即时通讯方面的内容,但是一直没有怎么去做过聊天部分的.这次是刚刚使用融云,做一下记录. 关于融云SDK集成的具体步骤,我都是参考以下这些文章(很多图片都是直接从这些地方拿的,我真是太 ...

  8. 基于融云的即时通讯开发(一)

    一.概述 现在的应用中,即时通讯功能已经很普遍了,从这篇文章开始,我们以第三方平台融云的服务为基础,研究一下如何开发一个具有及时通信功能的软件. 首先,进入融云的官网,地址如下: http://ron ...

  9. iOS集成融云即时通讯详细教程

    相关集成方法也可以直接参考官方文档http://www.rongcloud.cn/docs/ios.html.下面是我集成过程中的一些详细步骤. 1.准备工作:到官网http://www.rongcl ...

最新文章

  1. Python PIP Install throws TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'
  2. layui结合form,table的全选、反选v1.0
  3. 【CRMEB知识付费系统v1.4.4】
  4. 处理机调度的概念、层次
  5. mysql命令:set sql_log_bin=on/off
  6. CodeBlocks使用静态链接库
  7. Don't Panic! KRACK 没你想象的那么糟
  8. 通过InstallShield官网申请注册码
  9. linux运行脚本运行不了,shell脚本在windows上可以执行,Linux上面不能执行
  10. oracle中imp命令详解,Oracle使用imp命令导入数据详解
  11. 有没有和作业帮一样的计算机,学霸君、学习宝和作业帮哪个好【对比】
  12. 残差分析三要素(补充说明OLS六个条件与残差季节性)
  13. 有一个姑娘,我无法忘记她
  14. 8个经典智能电子锁方案精选合辑
  15. csv文件导入Mysql
  16. tikz绘图学习(长期更新)
  17. audio标签无法播放amr格式音频解决方案(benz-amr-recorder)
  18. 使用SQLlite Exper 讲Access数据库导入到 sqlite
  19. 网络数据分析溯源(查找邮件地址)
  20. 一年节气查询阳历日期与节气名称

热门文章

  1. 基于51单片机的停车场车位管理系统(程序+仿真+原理图+软件)
  2. Unity随记(七) shader实现石像石化效果
  3. win7系统扩展双屏幕时,怎样在两个屏幕下都显示任务栏
  4. ubuntu16.04系统下谷歌浏览器不能拖入下载好的扩展程序离线包
  5. ibm刀片服务器虚拟化,IBM刀片服务器虚拟化方案
  6. 磁带设备使用方法总结
  7. 史上最全 | HBase 知识体系吐血总结
  8. 用python制作马赛克式/蒙太奇拼图(小图片作为像素拼成大图片)
  9. scViewerX ActiveX 多功能文件查看器控件
  10. 在iPhone应用里直接打开app store 评论页面的方法