RongCLoud即时通信学习笔记

一、前期准备:须要在融云注册app,获取appkey在AppDelegate中进行注册。环境分为开发环境和生产环境,调试能够用开发环境,app上线须要注册生产环境。json

二、获取用户token(用来用户身份认证的,经过用户的token,获取用户的信息)的过程:缓存

 

若是没有服务器,融云提供了调试的接口,点击提交便可获取token来进行测试:服务器

 

三、获取到token以后就能够调用-connectWithToken:success:error:tokenIncorrect:  方法与融云服务器创建链接,这个方法在程序运行过程当中只须要调用一次,在网络断开或者先后台切换的状况下,会自动重连,除非是手动断开链接,是须要再次调用该方法进行重连。网络

须要注意两点:app

      1、该方法有一个成功的回调和一个错误的回调,在错误回调中,有一种错误状态是原本已经链接成功的,须要进行判断:布局

 

    2、登录成功以后,能够将token存到沙盒偏好设置中进行存储。须要注意,该方法的回调是在子线程中进行的,若是须要进行ui操做,须要切换到主线程。测试

四、登录成功,跳转到会话列表控制器,融云已经提供了一个会话列表控制器 (RCConversationListViewController),咱们能够建立一个控制器继承自RCConversationListViewController。属性displayConversationTypeArray能够设置显示的聊天类型(单聊、讨论组、群聊、聊天室、客服等)。ui

会发现会话列表中的用户头像和用户名字不显示,为了解决这个问题,须要建立一个单独的类,遵照协议RCIMUserInfoDateSource,这个类用来管理用户信息的,用户信息能够从服务器或者缓存中读取,能够获取用户信息、缓存用户信息、删除用户信息。而后将这个类初始化,传给[RCIM sharedRCIM],RCIM就能够从该类中读取用户信息。编码

五、会话界面,融云也提供了一个控制器类(RCConversationViewController),一样建立一个控制器继承自它,初始化方法中须要传递displayConversationTypeArray和targetId(和谁进行会话)。线程

自定义消息cell(文字、表情、红包、位置、语音)等:

分两步:

第一步:自定义消息并注册消息类型:须要继承自RCMessageContent类,实现三个协议:

 

消息发送的流程:

 

消息接收流程,下图主要介绍的是离线接收消息:

 

第二步:自定义cell并注册cell(继承自融云提供的RCMessageBaseCell或RCMessageCell(布局更复杂))

这两种cell的区别:第二种有头像和名字,第一种没有。

自定义cell须要有三步,第一步注册cell(register方法,和collectionView注册方法类似),第二步返回cell item实例的方法

 

这个方法当只有自定义cell的时候才会调用,例如文本消息、图片消息、语音消息不是自定义的就不会走这个方法。

第三步,实现返回cell大小的方法。

六、发送红包功能

在会话控制器的父类RCConversationViewController中有一个属性 RCPluhinBoardView * pluginBoardView,扩展功能板view,能够扩展发送地理位置、图片、红包等功能。

使用该view下面的方法,能够添加扩展项。

 

实现该view的代理方法,在代理方法中监听到点击某个扩展项的回调,能够根据上面方法中的tag值进行相应的处理。

发送消息时会调用下面的方法

 

方法中的参数说明和注意事项以下:

 
 

自定义红包消息类,继承自第五条提到的RCMessageContent,红包须要有两个属性,amount(红包金额),desc(描述)。而后实现RCMessageContent中的三个协议的方法,第一个协议RCMessageCoding,进行json之间的编码和解码;第二个协议RCMessagePersistentCompatible,是否须要存入本地和计入未读数,红包消息是须要进行本地存储和进行未读数的,只要返回枚举的第三个选项便可;第三个协议RCMessageContentView,在会话列表中显示的红包消息摘要内容。

自定义红包cell类,继承自RCMessageCell类,这个cell类中有一个messageContentView,是用来放消息内容的视图,这个视图有一个setEventBlock:,cell大小发生改变的时候调用该方法,能够给消息中子视图从新布局。

七、撤回消息:

撤回消息的实现流程,长按消息,消息上方出现复制/删除/撤回的视图,点击撤回,删除该条消息本地存储,发送给融云服务器,服务器告诉对方客户端这是一条撤回消息,进行撤回。

当点击消息cell时,会触发下面的方法,在UIMenuControlle为消息上方出现的消息处理视图

 

在recall: 方法中须要作的处理是发送一条撤回消息,撤回消息cell和红包消息cell同样须要自定义,也须要一个继承自RCMessageContent的messageContent类,可是撤回消息须要进行本地存储,但不须要计入未读数。

而后将该撤回消息发送给对方客户端,把当前的长按消息删除掉。本地消息删除掉了,远程的怎么删除:

 

实现上面的代码,在下面的代码中接收撤回消息

 

先判断是不是撤回消息,而后从当前消息列表中找是否有该消息,而后进行删除

自定义撤回消息cell,只须要继承自RCMessageBaseCell,自定义里面的内容。

相关文章
相关标签/搜索