消息相关问题

最近更新时间:2024-10-11 12:03:51

我的收藏

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

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

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

请根据 推送服务(Push)> 常见问题 文档进行处理。

红包消息怎么处理?

红包消息与 @ 消息类似,可以通过 TIMCustomElem 来实现。需要应用在 UI 上做相应的特殊处理,例如检查到当前消息为红包消息后,消息展示为红包的样式。 另外,红包消息作为重要消息,最好在发送消息的时候将其设置为高优先级消息,以最大程度保证消息在触达频率限制的情况下仍可以送达(目前群内消息默认限制频率40条/s, 单聊消息默认限制频率为5条/s)。
关于消息优先级相关的内容可以参考 消息优先级
注意
红包消息涉及支付的部分,请自行实现或集成第三方支付 SDK,IM SDK 暂不提供相关功能。
一个简单的红包消息的构建过程如下(Android):
// 构建一条新的消息
TIMMessage msg = new TIMMessage();
try{
// 填充自定义的消息协议
JSONObject redPacket= new JSONObject();
redPacket.put("type", "RED_PACKET");
redPacket.put("amount", 2018);
redPacket.put("msg", "Happy new year!");

// 根据自己定义的协议构建自定义消息元素
TIMCustomElem customElem = new TIMCustomElem();
customElem.setDesc("red packet");
customElem.setData(redPacket.toString().getBytes("utf-8");
if(msg.addElement(customElem) != 0){
Log.e(TAG, "add custom elem failed");
return;
}
}catch(Exception e){
Log.e(TAG, "build custom elem failed");
return;
}

// 设置消息优先级为高优先级
msg.setPriority(TIMMessagePriority.High);

即时通信 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 的用户列表。

聊天消息时间格式

TUIKit 时间戳展示逻辑(以 Web & uni-app 为例) :
1. 若当前消息与上一条消息间隔超过10分钟,会进行新的时间戳展示,否则归为上一个聊天单元。
2. 对于满足条件1,需要展示的时间戳会根据与当前时间的差值进行展示,计算和显示规则如下:
差值计算结果
显示规则
今天
时 + 分。
示例:8:30
昨天
昨天 + 时 + 分。
示例:昨天 8:30
一周内(7天,以天为单位计算)
星期 + 时 + 分。
示例:星期一 8:30
超过一周,在本年内
月/日 + 时 + 分。
示例:9/1 8:30
不在本年
年/月/日 + 时 + 分。
示例:2024/9/1 8:30