无 UI 集成方案

服务端 API

有奖征文|投稿上云技术实践,赢取价值5000元大奖> HOT

同时集成了即时通信 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 的初始化,如果不是,需要修改为只在主进程初始化。
    • 如果是第三方离线推送,例如小米、华为,魅族等,可以先通过对应的第三方控制台直接推送消息,确认手机是否可以收到,如果收不到可能存在两种原因:
      1)用户集成第三方离线推送有问题,请按照文档操作。
      2)手机兼容问题,该手机本身不能很好的兼容该离线推送,例如部分华为手机无法接收到华为的离线推送。
    • 如果是 OPPO 离线推送,请确认在即时通信控制台的 Android 推送证书处填入的是 MasterSecret 而不是 AppSecret。

不管是 APNs 推送还是 Android 上的离线推送,在以上步骤无法确认问题时,需要继续确认以下情况:

  1. 确认接收方 ID 是否与消息要推送的用户 ID 一致。
  2. 确认是否设置了离线推送监听器(Android)。
  3. 确认是否设置了免打扰,iOS 参考 设置自定义推送提示音,Android 参考 设置全局离线推送配置
  4. 确认消息是否是通过 sendOnlineMessage 接口发送的在线消息,或者通过 REST API 推送的时候设置了 MsgLifeTime0
  5. 确认消息是否设置了不进行离线推送的标识,iOS 参考 自定义离线消息属性,Android 参考 设置单条消息的离线推送配置
  6. 若还是无法定位,可提供相关信息给技术人员进行排查。

红包消息怎么处理?

红包消息与 @ 消息类似,可以通过 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。

目录