zoukankan      html  css  js  c++  java
  • 腾讯云通信WebIM事件回调的坑~

    最近在开过工作中用到了腾讯IM的功能,由于业务的需要主要使用到了:

    1.loginInfo 用户登录,用户信息

    2.getRecentContactList 获得最近联系人

    3.getLastGroupHistoryMsgs 获取群聊天信息

    4.getC2CHistoryMsgs 获取C2C的消息

    5.sendMsg 消息的发送(图片、文字、自定义)

    6.onMsgNotify 消息回调

    在整体开发过程中,1-5相对开发比较顺畅,当时在消息回调的时候出现了问题

    消息回调是比较重要的,是整个通讯模块的核心部分,所有消息的收发显示全依赖于此。

    官方方法如下,说明也比较简单,并未标注一些特殊情况。

     1 //监听新消息事件
     2 //newMsgList 为新消息数组,结构为[Msg]
     3 function onMsgNotify(newMsgList) {
     4     //console.warn(newMsgList);
     5     var sess, newMsg;
     6     //获取所有聊天会话
     7     var sessMap = webim.MsgStore.sessMap();
     8     for (var j in newMsgList) {//遍历新消息
     9         newMsg = newMsgList[j];
    10         if (newMsg.getSession().id() == selToID) {//为当前聊天对象的消息
    11             selSess = newMsg.getSession();
    12             //在聊天窗体中新增一条消息
    13             //console.warn(newMsg);
    14             addMsg(newMsg);
    15         }
    16     }
    17     //消息已读上报,以及设置会话自动已读标记
    18     webim.setAutoRead(selSess, true, true);
    19     for (var i in sessMap) {
    20         sess = sessMap[i];
    21         if (selToID != sess.id()) {//更新其他聊天对象的未读消息数
    22             updateSessDiv(sess.type(), sess.id(), sess.unread());
    23         }
    24     }
    25 }

    开始认为在该消息回调是只要有消息就会触发,但在开发中发现:

    1.当自己C2C消息发送的时候,并未触发

    2.当自己GROUP消息发送的时候,会触发

    这样就导致,我们最初按照C2C消息监听逻辑开发的消息接收模块,应用到GROUP上的时候出现了,消息多次显示的问题

    主要表现为,多端在线,其他端发送正常,本端发送异常

    思考,可能是因为腾讯云认为如果消息为GROUP的时候会进行全员广播,而此时自己也是群成员的一部分;而C2C的时候则不会。

    所以在开发中需注意几点:

    1.本端发送消息,区分GROUP和C2C展示

    2.消息接收,区分是本端还是其他端,如果是本端则不进行重复处理,这里需要在代码中标注

    3.消息接收,区分是自己发送,还是别人发送

    作者:旧旧的 <393210556@qq.com> 解决问题的方式,就是解决它一次

     

  • 相关阅读:
    Python 的 IDLE 编辑器
    Android中如何在Eclipse中关联源代码?(图文)
    HTMl5的存储方式sessionStorage和localStorage详解
    HTML的 <u> 标签
    CSS巧妙实现分隔线的几种方法
    关于ajax跨域请求(cross Domain)
    JQuery中$.ajax()方法参数都有哪些?
    最优雅,高效的javascript字符串拼接
    深入学习JavaScript: apply 方法 详解(转)——非常好
    jQuery.ajax() 函数详解
  • 原文地址:https://www.cnblogs.com/widgetbox/p/10550950.html
Copyright © 2011-2022 走看看