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

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

2.getRecentContactList 获得最近联系人

3.getLastGroupHistoryMsgs 获取群聊天信息

4.getC2CHistoryMsgs 获取C2C的消息

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

6.onMsgNotify 消息回调

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

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

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

 //监听新消息事件
//newMsgList 为新消息数组,结构为[Msg]
function onMsgNotify(newMsgList) {
//console.warn(newMsgList);
var sess, newMsg;
//获取所有聊天会话
var sessMap = webim.MsgStore.sessMap();
for (var j in newMsgList) {//遍历新消息
newMsg = newMsgList[j];
if (newMsg.getSession().id() == selToID) {//为当前聊天对象的消息
selSess = newMsg.getSession();
//在聊天窗体中新增一条消息
//console.warn(newMsg);
addMsg(newMsg);
}
}
//消息已读上报,以及设置会话自动已读标记
webim.setAutoRead(selSess, true, true);
for (var i in sessMap) {
sess = sessMap[i];
if (selToID != sess.id()) {//更新其他聊天对象的未读消息数
updateSessDiv(sess.type(), sess.id(), sess.unread());
}
}
}

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

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

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

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

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

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

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

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

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

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

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

腾讯云通信WebIM事件回调的坑~的更多相关文章

  1. 服务端搭建——腾讯云通信(IM)

    前言 在手机app中因为需要即时聊天功能,在项目采用腾讯云通信服务.如下流程图: 当手机端拿到签名后,就可登录IM,使用im提供的sdk收发信息. 准备工作 1.在腾讯云注册获取appid 2.申请开 ...

  2. 腾讯云通信UserSig生成.Net实现

    腾讯云通信后台生成usersig只有java实现代码.以下是根据java代码转换为net实现,java版GitHub地址:https://github.com/TencentVideoCloudMLV ...

  3. 腾讯云API弹性公网IP踩坑

    由于自己管理的云服务器数量比较多,时不时需要更换IP,在管理台上一下下点击,实在浪费时间,于是就想到了通过API调用的方式,将更换IP一系列动作,全部集成到Python代码里面,实现一行命令,完成IP ...

  4. SQLyog远程连接腾讯云服务器数据库Mysql遇到的坑

    首先说明我的数据库是安装在云服务器上,不是专业的数据库服务器,没错就是10块钱包月的. 然后觉得使用SQLyog远程维护数据库比较方面,可是怎么都登录不上去. 下面分析原因: 1.安全组是否放过了访问 ...

  5. 腾讯通信云服务端使用心得,腾讯云IM

    腾讯通信云服务端使用心得 1.腾讯通信服务入口并创建应用 方便使用保留url地址 :   https://cloud.tencent.com/product/im 注册账号腾讯云账号->通过审核 ...

  6. 复盘价值1000万的腾讯云硬盘固件"BUG"

    摘要: 除了吃瓜,还是得吸取教训啊同学们! 这次,我从纯技术角度分析腾讯云与前沿数控的磁盘数据丢失事件,不站队. 硬盘门 这里说的硬盘门不是10年前陈老师的那一次,而聊的是最近"腾讯云&qu ...

  7. IM云通信行业步入快车道,谁将成为代表中国的全球IM“独角兽”?

    2016年,Twilio的成功上市,以及抢眼的股价表现,拓宽了全球云通信行业的想象空间,行业内公司估值水平也集体上调. 在中国,IM云通信行业也从2016年开始进入了一个“黄金发展时期”,一批如融云. ...

  8. 腾讯云H5语音通信QoE优化

    本文首发在云+社区,未经许可,不得转载. 云+导语:4月21日,腾讯云+社区在京举办"'音'你而来,'视'而可见--音视频技术开发实战沙龙",腾讯音视频实验室高级工程师张轲围绕网络 ...

  9. 云-腾讯云-云通信:云通信(IM)

    ylbtech-云-腾讯云-云通信:云通信(IM) 企业数字化转型的通信助手,让通信触达全球,智联万物 1.返回顶部 1. 云通信(Instant Messaging,IM)承载亿级 QQ 用户即时通 ...

随机推荐

  1. TerminateProcess

    Remarks The TerminateProcess function is used to unconditionally cause a process to exit. The state ...

  2. python学习笔记十六:读取JSON文件

    读取JSON文件可以用JSON库,示例代码: #coding:utf-8 import json with open("msg.json") as jsonfile: json_d ...

  3. 每天一个Linux命令(5):rm命令

    rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉.对于链接文件,只是删除整个链接文件,而原有文件保持不变. 语法 rm (选项)(参数) 选项 - ...

  4. Centos/linux开放端口

    在linux上部署tomcat发现外部无法访问可以通过两种方式解决: 1.关闭防火墙 service iptables stop(不推荐) 2.修改相关文件,开放需要开放的端口 (1)通过命令vi / ...

  5. linux部署环境配置

    https://blog.csdn.net/dsczxcc/article/details/78728330

  6. 不作伪分享者决定完整分享我自学Python3的全部过程细节

    不作伪分享者决定完整分享我自学Python3的全部过程细节   我不要作伪分享者 十六年前我第一次见到了电脑,并深深地爱上了它: 十二年前我第一次连上了网络,并紧紧地被它爱上. 十年前的网络是田园美景 ...

  7. Windows添加自定义服务、批处理文件开机自启动方法

    [Windows 添加自定义服务方法]: 1.使用Windows服务工具instsrv.exe与srvany.exe: 参考:https://wenku.baidu.com/view/44a6e6f8 ...

  8. pytorch:EDSR 生成训练数据的方法

    Pytorch:EDSR 生成训练数据的方法 引言 Winter is coming 正文 pytorch提供的DataLoader 是用来包装你的数据的工具. 所以你要将自己的 (numpy arr ...

  9. B - Help Jimmy

    B - Help Jimmy Time Limit: 1000/1000MS (C++/Others) Memory Limit: 65536/65536KB (C++/Others) Problem ...

  10. poj 1716 Integer Intervals (差分约束 或 贪心)

    Integer Intervals Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12192   Accepted: 514 ...