腾讯云通讯WebIM事件回调的坑~

最近在开过工做中用到了腾讯IM的功能,因为业务的须要主要使用到了:web

1.loginInfo 用户登陆,用户信息数组

2.getRecentContactList 得到最近联系人spa

3.getLastGroupHistoryMsgs 获取群聊天信息code

4.getC2CHistoryMsgs 获取C2C的消息对象

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

6.onMsgNotify 消息回调事件

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

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

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

 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> 解决问题的方式,就是解决它一次

相关文章
相关标签/搜索