消息状态及处理方式
回答:
消息的状态指的是阅读状态,就是平常所说的已读、未读,消息状态是基于会话的概念,某个会话有几条未读消息,阅读和更改状态也都是基于会话做操作。
请注意,融云服务器端消息是没有状态的,具体状态是根据消息的发送时间(消息达到服务器端的时间)和用户阅读时间戳(用户已读的最后一条消息的发送时间)的关系来计算得知的,用户的阅读时间戳在浏览器做本地缓存(根据浏览器类型使用localStorage或者cookie),请注意保护相应缓存。
总结一下,状态的基本操作流程是:
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:在新的浏览器里登录时,可能会因为消息太多没法第一时间获取同步状态的消息,虽然最后结果一定会是正确,只是可能会有一个先未读再变成已读的现象。
您认为此回答对您有帮助?