IM 即时通讯 (441)
Android (210)
- 初始化&链接 (8)
- 事件&监听处理 (7)
- 用户信息 (13)
- 会话列表 (16)
- 聊天会话 (26)
- 消息处理 (35)
- 自定义消息 (6)
- 音视频 (2)
- 推送&通知 (34)
- 扩展功能 (4)
- 第三方地图 (3)
- 依赖&配置 (9)
- 升级说明 (3)
- 其他 (44)
iOS (166)
- SDK 导入 (10)
- 连接 (8)
- 事件处理 (2)
- 用户信息 (3)
- 会话列表 (14)
- 聊天会话 (44)
- 消息处理 (26)
- 自定义消息 (8)
- 推送&通知 (19)
- 扩展功能 (5)
- 国际化 (4)
- 音视频 (3)
- 其他 (20)
Web (36)
Server (29)
消息状态及处理方式
什么是消息状态?如何判断状态?状态如何同步?
发布时间: 2017-08-21 14:33
回答:
消息的状态指的是阅读状态,就是平常所说的已读、未读,消息状态是基于会话的概念,某个会话有几条未读消息,阅读和更改状态也都是基于会话做操作。
请注意,融云服务器端消息是没有状态的,具体状态是根据消息的发送时间(消息达到服务器端的时间)和用户阅读时间戳(用户已读的最后一条消息的发送时间)的关系来计算得知的,用户的阅读时间戳在浏览器做本地缓存(根据浏览器类型使用localStorage或者cookie),请注意保护相应缓存。
简述:
己端读消息(清未读数)后, 在清除未读数的会话中发送一条同步消息, 告知自己其他端: 此会话未读数已清空, 请调用本地清除未读数方法.
其他端收到同步消息后, 根据 会话类型(conversationType) 和 目标 id(targetId) 调用对应清除未读数方法
总结一下,状态的基本操作流程是:
1、接收到新消息后,获取某个会话的未读数
var getUnreadCount = RongIMClient.getInstance().getUnreadCount; getUnreadCount(conversationtype,targetId,{ onSuccess:function(count) { //count 会话未读数 }, onError:function(error){} });
2、清理会话里的未读消息数,具体什么时机取决于对已读的界定,一般在进入会话时执行
var clearUnreadCount = RongIMClient.getInstance().clearUnreadCount; clearUnreadCount(conversationType, targetId, { onSuccess: function () {}, onError: function (errorCode) {} });
3、同步消息状态到其他端
// 从消息里获取服务器端时间,以最近一条已读 message 为准 var msg = { lastMessageSendTime: message.sentTime }; msg = new RongIMLib.SyncReadStatusMessage(msg); var sendSyncStutus = RongIMClient.getInstance().sendMessage; sendSyncStutus(conversationType, targetId, msg, { onSuccess: function () { }, onError: function () {} });
4、其他端接受并同步状态
// 其他端接收到同步消息后,调用清除未读数做更新处理 var clearUnreadCount = RongIMClient.getInstance().clearUnreadCount; clearUnreadCount(conversationType, targetId, { onSuccess: function () {}, onError: function (errorCode) {} });
最后请注意:
1:清除缓存要谨慎,尽小范围的清除,绝对禁止使用localStorage.clear()这样简单粗暴的方式
2:在新的浏览器里登录时,可能会因为消息太多没法第一时间获取同步状态的消息,虽然最后结果一定会是正确,只是可能会有一个先未读再变成已读的现象。