RongCLoud即时通讯学习笔记

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

2、获取用户token(用来用户身份认证的,通过用户的token,获取用户的信息)的过程:

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

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

需要注意两点:

      一、该方法有一个成功的回调和一个错误的回调,在错误回调中,有一种错误状态是本来已经连接成功的,需要进行判断:

    二、登陆成功之后,可以将token存到沙盒偏好设置中进行存储。需要注意,该方法的回调是在子线程中进行的,如果需要进行ui操作,需要切换到主线程。

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

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

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

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

分两步:

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

消息发送的流程:

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

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

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

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

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

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

6、发送红包功能

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

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

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

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

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

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

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

7、撤回消息:

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

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

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

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 14,767评论 0 15
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,120评论 19 139
  • 相信大家在项目中会用到即时通讯功能,自己去写的话会需要前后台合作,会大大加大开发的周期,所以考虑使用第三方的即时通...
    ProgrammerChan阅读 12,742评论 16 38
  • 理财和金融类:《穷查理宝典》《一本书读懂财报》《激荡三十年1》《激荡三十年2》《邓普顿教你逆向投资》《彼得林奇的成...
    子非_似是而非阅读 1,225评论 0 0
  • 核果,雨。
    M有如果阅读 1,423评论 5 4

友情链接更多精彩内容