集成融云 SDK 怎么实现多端同步未读数
最近在集成融云 SDK 的时候,碰到了一个跟未读数有关的问题,现象是这样的:
比如我在其中 Web 端已经清除了某个会话的未读数然后退出,再换个设备登入,这个时候未读数还有,并没有清除掉,我就纳闷了,我明明已经清除了会话未读数的呀,怎么换个设备登入就又有了呢?
肯定是融云的 BUG ,所以我立马就提了一个工单,暗想:哈哈,给我逮着了一个 BUG (有点理解测试人员的快乐来源了)
可是事与愿违,跟融云技术人员沟通后才发现是我这边需要做多端同步未读数同步的操作
先讲讲会话未读数是什么?
-
从字面上就看出来是指某一个会话中未读消息的数量,在会话数据中 unreadMessageCount 表示当前会话的未读消息数
-
未读消息存在 localStorage 中,未读消息数是针对当前端的未读消息数,服务器不存未读消息数量
- 清除浏览器缓存会导致会话未读数不准确
- 若浏览器不支持或禁用 localStorage,未读消息数将不会保存,浏览器页面刷新未读消息数将不会存在
为什么需要多端同步未读数?
原因是换端登入,融云这边有消息补偿机制,即换端重新登录时,获取当天收发的所有消息,在收消息的过程中,经过 SDK 内部逻辑处理,会累加会话未读数且存在 localStorage 中
所以,如果不同步的话就会出现多端未读数不一致的情况
怎么多端同步未读数(重点来咯)
1、调用 conversation.read() 清除未读数。
2、清除成功后发送 RC:SRSMsg 类型消息进行未读数同步。
3、其他端接受到 RC:SRSMsg 类型消息,掉用 conversation.read() 方法进行本地未读数清除
看代码: