消息相关问题

同时集成了即时通信 IM 和 TPNS,存在大量的厂商类冲突,这种问题怎么解决?

目前即时通信 IM 已使用 移动推送 TPNS 提供的厂商 jar 包,您可参见文档 IM 离线推送(Android)替换相关依赖包即可解决该问题。

消息没有收到或消息丢失如何处理?

单聊消息
确认消息是否发送成功。
确认接收方是否登录成功。
确认发送消息的指定会话是否与接收方一致。
群组消息
确认消息是否发送成功。
确认接收方是否登录成功。
确认接收方是否是群成员。
不管是 C2C 消息还是群消息,在以上步骤无法确认问题的时候,需要继续确认以下情况:
1. 确认是否注册了消息监听器。
2. 确认发送方发送消息的时候,是否把elem添加到消息中了(发消息的时候需要检查addElement的返回值)。
3. Android 的需要确认是否注册了多个消息监听器,并且在消息监听器中返回了true

收不到离线推送怎么处理?

APNs 参考 离线推送(iOS) 说明文档进行以下确认:
确认是否正确上传证书到腾讯云控制台。
确认在登录成功后,是否成功上传 token 到腾讯云。
确认在上报 token 时,是否上报了正确的证书 ID。
确认是否正确上报了切前后台事件。
确认消息是否只有 TIMCustomElem,且其中的 desc属性是空的。
MsgRandom 等去重标记设为一样,导致被去重无法推送。
如果是群消息,是否设置了消息不提醒选项。
Android 参考 离线推送 说明文档进行以下确认:
确认是否正确上传了推送证书。
确认是否成功上报 token。
如果不是第三方离线推送(华为,小米,魅族),确认一下 QALService 进程是否存活,不存活的情况下确实会收不到离线推送,需要依赖系统的自启动权限。
存在多进程的情况下,是否只在主进程进行了 IM SDK 的初始化,如果不是,需要修改为只在主进程初始化。
如果是第三方离线推送,例如小米、华为,魅族等,可以先通过对应的第三方控制台直接推送消息,确认手机是否可以收到,如果收不到可能存在两种原因:
用户集成第三方离线推送有问题,请按照文档操作。
手机兼容问题,该手机本身不能很好的兼容该离线推送,例如部分华为手机无法接收到华为的离线推送。
如果是 OPPO 离线推送,请确认在即时通信控制台的 Android 推送证书处填入的是 MasterSecret 而不是 AppSecret。
不管是 APNs 推送还是 Android 上的离线推送,在以上步骤无法确认问题时,需要继续确认以下情况:
1. 确认接收方 ID 是否与消息要推送的用户 ID 一致。
2. 确认是否设置了离线推送监听器(Android)。
3. 确认是否设置了免打扰,iOS 参考 设置自定义推送提示音,Android 参考 设置全局离线推送配置
4. 确认消息是否是通过 sendOnlineMessage 接口发送的在线消息,或者通过 REST API 推送的时候设置了 MsgLifeTime0
5. 确认消息是否设置了不进行离线推送的标识,iOS 参考 自定义离线消息属性,Android 参考 设置单条消息的离线推送配置
6. 若还是无法定位,可提供相关信息给技术人员进行排查。

即时通信 IM 消息存储时长是多久?

单聊消息及非直播群消息具备历史消息存储能力,您可以登录 即时通信 IM 控制台 修改相关配置。不同套餐包默认配置如下:
开发版:7天,不支持延长。
标准版:7天,支持延长。
进阶版:30天,支持延长。
延长历史消息存储时长是付费增值服务,具体计费说明请参见 增值服务资费

为什么发送者已经被拉入黑名单但消息依旧显示发送成功?

即时通信 IM 在控制台的 黑名单检查 管理中提供发送消息后展示发送成功功能,当启用该功能时被拉黑用户侧发消息后仍展示发送成功 (实际对方不会收到消息) 。停用本设置项,则被拉黑用户侧发消息后会提示失败,SDK 会收到 错误码 20007 。具体配置请参照文档 黑名单检查

如何通过 COS 将图片地址变成可下载的域名格式?

上传需要用户自己处理。如果使用存储服务私有读,需要 URL 签名确保有下载权限(预签名下载)。

即时通信 IM 的消息唯一标识的规则是怎样的?

即时通信 IM 客户端单聊/群聊消息,Web 端单聊/群聊消息及服务端单聊消息唯一标识分别对应 msg_id,msgID 及 msgKey。
各端不同类型消息唯一标识的规则不同,具体规则如下:
客户端单聊/群聊消息 msg_id 的组成是:tinyid-clientTime-random。
Web 端单聊/群聊消息 msgID 的组成是(v2.17.0及以下):会话 id-msgSeq-random-1(我发送的消息) / 0(非我发送的消息)。
Web 端单聊/群聊消息 msgID 的组成是(v2.18.0及以上):tinyid-clientTime-random。
服务端单聊消息 msgKey 的组成是:clientSeq_random_serverTime。
服务端群聊消息通过群 id + msgSeq 来进行唯一标识。

直播群、社群是否支持 @ 消息?

直播群(AVChatRoom)不支持发送 @ 消息,社群(Community)支持 @ 单个用户,不支持 @ALL。


消息编辑 & 消息扩展 & 消息回应有什么区别?

消息功能
是否需要旗舰版
存储方式
拉取方式
并发设置是否会冲突
消息编辑
不需要
编辑信息直接存在消息体内,共用消息存储,单条消息最大 12K
编辑信息直接通过消息体返回,无需单独拉取
会有冲突
消息扩展
需要
扩展信息独立存储,单条消息最大支持设置 300 个扩展,单个扩展最大支持 1K
扩展信息需要单独拉取,仅支持逐条消息拉取
同一个扩展设置会冲突,不同的扩展设置不会冲突
消息回应
需要
回应信息独立存储,单条消息最大支持设置 10 个回应,单个回应最大支持 100 个用户
回应信息需要单独拉取,支持多条消息批量拉取
不会冲突

消息编辑:

您可以调用 modifyMessage(Android / iOS & Mac / Windows) 接口对原始消息内容做编辑。
优势:简单易用。
劣势:
如果多个用户同时编辑一条消息,可能会导致编辑冲突。
如果编辑后的消息内容过大,可能会导致消息大小超限(单条消息最大支持 12K)。
总结:消息编辑适合单个用户操作且存储需求较小的场景,比如订单消息场景,可以通过编辑消息的 cloudCustomData 字段来存储和修改订单的状态。

消息扩展:

您可以调用 setMessageExtensions (Android / iOS & Mac / Windows) 接口为一条消息添加扩展信息。
优势:
单条消息可以设置多个扩展,不同的扩展同时设置不会冲突。
扩展信息独立存储,不占用消息体大小,单条消息最大支持设置 300 个扩展,单个扩展最大支持 1K。
劣势:
同一个扩展同时设置,也会有冲突问题。
扩展信息需要调用 getMessageExtensions (Android / iOS & Mac / Windows) 接口单独拉取。
扩展信息不支持多条消息批量拉取。
总结:消息扩展适合多个用户操作且存储量较大的场景,比如问卷调查场景,每个扩展信息都是 {userID : 问卷调查内容} 的集合,不同的用户填写问卷调查不会冲突。

消息回应:

您可以调用 addMessageReaction (Android / iOS & Mac / Windows) 接口为一条消息添加回应信息。
优势:
单条消息可以添加多个回应,回应添加不冲突。
回应信息独立存储,不占用消息体大小,单条消息最大支持添加 10 个回应,单个回应最大支持 100 个用户。
回应信息支持多条消息批量拉取。
支持单独拉取使用同一个回应的用户列表。
劣势:
回应信息需要调用 getMessageReactions (Android / iOS & Mac/ Windows) 接口单独拉取。
回应信息只支持设置回应 ID,其他信息均不支持设置,SDK 会自动统计使用同一回应 ID 的用户列表。
总结:消息回应适合需要统计用户列表的场景,比如表情回应场景,用户添加表情回应只需传入表情 ID,SDK 会自动统计使用同一表情 ID 的用户列表。