目前即时通信 IM 已使用 移动推送 TPNS 提供的厂商 jar 包,您可参见文档 IM 离线推送(Android)替换相关依赖包即可解决该问题。
不管是 C2C 消息还是群消息,在以上步骤无法确认问题的时候,需要继续确认以下情况:
elem
添加到消息中了(发消息的时候需要检查addElement
的返回值)。true
。APNs
参考 离线推送(iOS) 说明文档进行以下确认:
TIMCustomElem
,且其中的 desc
属性是空的。MsgRandom
等去重标记设为一样,导致被去重无法推送。Android
参考 离线推送 说明文档进行以下确认:
不管是 APNs 推送还是 Android 上的离线推送,在以上步骤无法确认问题时,需要继续确认以下情况:
sendOnlineMessage
接口发送的在线消息,或者通过 REST API 推送的时候设置了 MsgLifeTime
为 0
。群内 @ 消息与普通消息没有本质区别,仅是在被 @ 的人收到消息时,需要在 UI 上做特殊处理。例如 QQ 的消息列表中会有标红提示。具体实现可以参考以下方案:
TIMCustomElem
, 并在 TIMCustomElem
里添加自己设计的标识该消息为 @ 消息的消息协议。{
"type":"REMIND",
"target":"user1"
}
@ 消息的构建过程示例代码如下(以 Android 平台为例):// 发送一条文本消息,并在消息中 @ 群成员 user1
TIMMessage msg = new TIMMessage();
// 构建文本消息元素体
TIMTextElem txtElem = new TIMTextElem();
txtElem.setText("@user1 nice to meet u");
if(msg.addElement(txtElem) != 0){
Log.e(TAG, "add text elem failed");
return;
}
try{
// 填充自定义的消息协议
JSONObject remindProto = new JSONObject();
remindProto.put("type", "REMIND");
remindProto.put("target", "user1");
// 根据自己定义的协议构建自定义消息元素
TIMCustomElem customElem = new TIMCustomElem();
customElem.setDesc("remind msg");
customElem.setData(remindProto.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;
}
注意:其中
TIMTextElem
不是必须的,如果确认不需要进行脏字过滤的情况下,可以把TIMTextElem
中的消息内容填到TIMCustomElem
中的desc
属性中。
TIMCustomElem
中的消息协议是否是 @ 消息协议。如果是, 则进行下一步处理,否则跳过。红包消息与 @ 消息类似,可以通过 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 控制台 修改相关配置。不同套餐包默认配置如下:
问题描述: 灰度发布部署灰度版本时不能更换镜像类型。 原因分析: 灰度发布针对...
其实不同行业,不同领域的风控还是有很大区别的,这里只针对典型刷量,刷榜,不...
据统计 2021年全国高考报名人数达到1078万 再创新高。圣达信旗下产品“掌上志愿...
1.白天不懂夜的黑,学霸不懂学渣的泪。 2.杯具有什么可怕的,可怕的是它会无限...
操作场景 如果您需要退订站点,请参考本章节操作。 云速建站支持5天无理由全额退...
毫无疑问,数据科学是21世纪最吸引人的职业道路,由具有强烈求知欲和技术专长的...
操作场景 设置节点的启动脚本可以帮助您在节点 ready 之前,对您的节点进行初始...
本文转载自微信公众号「UP技术控」,作者 conan5566 。转载本文请联系UP技术控公...
在国家对新基建的大力支持下,5G、物联网、人工智能等新技术新应用发挥着日益重...
【背景说明】 使用jmeter进行性能测试时,工具自带的查看结果方式往往不够直观和...