消息状态及处理方式


            
2017-08-21 14:33 | Web 2.0

回答:

消息的状态指的是阅读状态,就是平常所说的已读、未读,消息状态是基于会话的概念,某个会话有几条未读消息,阅读和更改状态也都是基于会话做操作。

请注意,融云服务器端消息是没有状态的,具体状态是根据消息的发送时间(消息达到服务器端的时间)和用户阅读时间戳(用户已读的最后一条消息的发送时间)的关系来计算得知的,用户的阅读时间戳在浏览器做本地缓存(根据浏览器类型使用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:在新的浏览器里登录时,可能会因为消息太多没法第一时间获取同步状态的消息,虽然最后结果一定会是正确,只是可能会有一个先未读再变成已读的现象。

您认为此回答对您有帮助?

共有 5 位开发者认为此问题有帮助

我对此仍有疑问!继续追问