帮你快速理解、总结文档立即下载

厂商消息分类使用指南

最近更新时间:2026-09-09 16:28:39
我的收藏

自分类规则与权益申请

根据推送内容进行分类管理,不同厂商叫法不一样,但整体都可以理解为两类:
高时效分类:适用于聊天、音视频呼叫、订单、交易等及时触达场景,通常不限推送额度,但须向厂商申请自分类权益并通过审核后使用。
普通分类:活动营销、内容推荐、资讯、广告、平台公告等非紧急场景,通常限制每台设备每天接收约 2~5 条。
禁止:
使用时应严格按照消息的真实业务场景选择分类,避免将运营或营销消息配置为高时效分类,违反分类标准的场景将会被厂商处罚。
厂商
消息分类规则
推送分类
单设备日推送限制
自分类权益申请
华为
服务与通讯类
不限量
资讯营销类
新闻阅读 5 条,其他消息 2 条
无需申请
荣耀
服务与通讯类
不限量
资讯营销类
新闻阅读 5 条,其他消息 2 条
无需申请
小米
私信消息
不限量
公信消息
5~8条
OPPO
通讯与服务类
不限量
内容与营销类
新闻阅读 5 条,其他消息 2 条
无需申请
vivo
系统消息
不限量
运营消息
新闻阅读 5 条,其他消息 2 条
无需申请
鸿蒙
服务与通讯类
根据实际情况进行管控
资讯营销类
新闻阅读 5 条,其他消息 2 条
无需申请
魅族
私信消息
不限量
无需申请
公信消息
资讯阅读 5 条,其他消息 3 条

消息分类字段取值说明

本章按厂商列出消息分类字段的合法取值,供您在控制台配置默认分类、或通过 API 为单条消息指定分类时查阅。部分取值(例如服务与通讯类、私信模板)需先在厂商后台申请相应权益,申请方式见各厂商小节。
华为
荣耀
小米
OPPO
vivo
鸿蒙
魅族
资讯营销类:无需申请,设置 HuaWeiCategory 即可,详细参见 华为云端通知 category 取值
服务与通讯类:申请 华为自分类权益,设置 HuaWeiCategory
消息大类
消息类型
Category 取值
服务与通讯
(需要申请 华为自分类权益
即时聊天
IM
音频、视频通话
VOIP
订阅
SUBSCRIPTION
出行
TRAVEL
健康
HEALTH
工作事项提醒
WORK
账号动态
ACCOUNT
订单&物流
EXPRESS
财务
FINANCE
设备提醒
DEVICE_REMINDER
邮件
MAIL
资讯营销
内容推荐、新闻、财经动态、生活资讯、调研、社交动态、产品促销、功能推荐、运营活动等
MARKETING
资讯营销类:无需申请,设置 HonorImportanceLOW (默认展示方式为静默通知,仅在下拉通知栏展示);
服务通讯类:申请 荣耀自分类权益,设置 HonorImportanceNORMAL (默认展示方式为锁屏展示+下拉通知栏展示)。
公信消息: 申请 channel,设置 XiaoMiChannelID(通知类别 ID);
私信消息: 申请 channel私信模板,设置 XiaoMiChannelIDXiaoMiTemplateId(模板 ID)、XiaoMiTemplateParam(模板变量)。


内容与营销类:无需申请,设置 OPPOCategory 即可,详细参见 OPPO category 取值
通讯与服务类:申请 私信模板,设置 OPPOCategoryOPPOPrivateMsgTemplateId(模板 ID)、OPPOPrivateTitleParameters(模板标题变量)、OPPOPrivateContentParameters(模板内容变量)。
消息大类
消息类型
Category 取值
通讯与服务
(需要申请 私信模板
即时聊天、音频、视频通话
IM
个人账号与资产变化
ACCOUNT
个人设备提醒
DEVICE_REMINDER
个人订单/物流状态变化
ORDER
个人日程/待办
TODO
个人订阅
SUBSCRIPTION
内容与营销
新闻资讯
NEWS
内容推荐
CONTENT
平台活动
MARKETING
社交动态
SOCIAL

运营消息:无需申请,设置 VIVOCategory 即可,详细参见 vivo category 取值
系统消息:申请 系统消息归档,设置 VIVOCategory
消息大类
消息类型
Category 取值
系统消息
(需要申请 系统消息归档
即时消息
IM
账号与资产
ACCOUNT
日程待办
TODO
设备信息
DEVICE_REMINDER
订单与物流
ORDER
订阅提醒
SUBSCRIPTION
运营消息
新闻
NEWS
内容推荐
CONTENT
运营活动
MARKETING
社交动态
SOCIAL
资讯营销类:无需申请,设置 HarmonyInfo.Category 即可,详细参见 鸿蒙云端通知 category 取值
服务与通讯类:申请 鸿蒙自分类权益,设置对应的 HarmonyInfo.Category
消息大类
消息类型
Category 取值
服务与通讯
(需要申请 鸿蒙自分类权益
即时聊天
IM
音频、视频通话
VOIP
未接通话消息提醒
MISS_CALL
出行
TRAVEL
健康
HEALTH
工作事项提醒
WORK
账号动态
ACCOUNT
订单&物流
EXPRESS
财务
FINANCE
设备提醒
DEVICE_REMINDER
邮件
MAIL
语音播报
PLAY_VOICE
订阅
SUBSCRIPTION
资讯营销
财经动态、生活资讯、调研、其他、内容推荐、新闻、社交动态、功能推荐、运营活动、产品促销等
MARKETING
公信消息:无需申请,设置 MeiZuNoticeMsgType0 ,详细参见 魅族推送消息新规文档
私信消息:无需申请,设置 MeiZuNoticeMsgType1

REST API 设置消息分类

REST API 通常由服务端调用,可能发送多种业务消息,例如:单聊/群聊消息、系统通知、订单、交易、安全提醒、运营活动、内容推荐等。这些消息不一定都是 IM 分类,因此 REST API 发消息建议显式携带所有相关厂商参数,不要依赖控制台默认值,详细参见 公共参数(OfflinePushInfo 说明)
营销资讯类推送示例
即时通信类推送示例
{
// 其他参数...
"OfflinePushInfo": {
"Title":"离线推送标题",
"Desc": "离线推送内容",
"Ext": "{\\"entity\\":{\\"k1\\":\\"v1\\",\\"k2\\":\\"v2\\"}}", // 透传字段,建议长度不超过1k
"AndroidInfo": {
"Sound": "shake", // 铃声文件名,不带后缀
"XiaoMiChannelID": "xiaomi_channel_id", // 小米通知类别,Android 8.0 以上不填写无法收到推送
"OPPOCategory": "MARKETING", // OPPO 消息分类:内容与营销
"VIVOCategory": "MARKETING", // vivo 消息分类:运营消息
"HuaWeiCategory": "MARKETING", // 华为消息分类:资讯营销
"HonorImportance": "LOW", // 荣耀消息分类:资讯营销
"MeiZuNoticeMsgType": 0 // 魅族消息分类:公信消息
},
"HarmonyInfo": {
"Category": "MARKETING" // 鸿蒙消息分类:资讯营销
},
"ApnsInfo": {
"Sound": "apns.mp3", // 铃声文件名,带后缀
"BadgeMode": 1,
"MutableContent": 1
}
}
}

{
// 其他参数...
"OfflinePushInfo": {
"Title":"离线推送标题",
"Desc": "离线推送内容",
"Ext": "{\\"entity\\":{\\"k1\\":\\"v1\\",\\"k2\\":\\"v2\\"}}", // 透传字段,建议长度不超过1k
"AndroidInfo": {
"Sound": "shake", // 铃声文件名,不带后缀
"VIVOCategory": "IM", // vivo 消息分类:系统消息
"HuaWeiCategory": "IM", // 华为消息分类:服务与通讯
"HonorImportance": "NORMAL", // 荣耀消息分类:服务通讯
"MeiZuNoticeMsgType": 1, // 魅族消息分类:私信消息
"XiaoMiChannelID": "xiaomi_channel_id", // 小米通知类别,Android 8.0 以上不填写无法收到推送
"XiaoMiTemplateId": "xxxx", // 小米私信消息模板id
"XiaoMiTemplateParam": { // 小米私信消息标题模板填充参数,json格式
"keywords1": "k1",
...
},
"OPPOCategory": "IM", // OPPO 消息分类:通讯与服务
"OPPOPrivateMsgTemplateId": "xxxx", // OPPO 私信消息模板id
"OPPOPrivateTitleParameters": { // OPPO 私信消息标题模板填充参数,json格式
"k1": "v1",
...
},
"OPPOPrivateContentParameters": { // OPPO 私信消息内容模板填充参数,json格式
"k1": "v1",
...
}
},
"HarmonyInfo": {
"Category": "IM" // 鸿蒙消息分类:服务与通讯
},
"ApnsInfo": {
"Sound": "apns.mp3", // 铃声文件名,带后缀
"BadgeMode": 1,
"MutableContent": 1
}
}
}

客户端设置消息分类

客户端通过 Chat SDK 发消息时,通常是单聊、群聊、私信、@ 提醒等 IM 场景,建议在控制台证书页面将厂商默认值配置为 IM 服务与通讯类。这种方式的好处是:客户端代码简单,分类配置可在控制台集中维护,后续调整默认分类通常不需要客户端发版。分类操作路径:腾讯云控制台 > 推送服务 Push > 基础配置 > 对应厂商证书 > 编辑
华为
荣耀
小米
OPPO
vivo
鸿蒙
魅族







如果某条消息需要使用其他分类,例如活动通知、营销通知、订单通知,可以在当前消息的 V2TIMOfflinePushInfo 中显式传入厂商分类字段。示例代码如下:
营销资讯类推送示例
即时通信类推送示例
Android
iOS
uni-app
Flutter
React Native
HarmonyOS
Unity
Unreal Engine
微信小程序
import android.util.Log
import com.tencent.imsdk.v2.V2TIMManager
import com.tencent.imsdk.v2.V2TIMMessage
import com.tencent.imsdk.v2.V2TIMOfflinePushInfo
import com.tencent.imsdk.v2.V2TIMSendCallback

val pushInfo = V2TIMOfflinePushInfo()
pushInfo.title = "离线推送标题"
pushInfo.desc = "离线推送内容"
// 透传字段,建议长度不超过 1k
pushInfo.ext = "{\\"entity\\":{\\"k1\\":\\"v1\\",\\"k2\\":\\"v2\\"}}".toByteArray()
pushInfo.androidSound = "shake" // 铃声文件名,不带后缀
pushInfo.setAndroidXiaoMiChannelID("xiaomi_channel_id") // 小米通知类别,Android 8.0 以上不填写无法收到推送
pushInfo.setAndroidOPPOCategory("MARKETING") // OPPO 消息分类:内容与营销
pushInfo.setAndroidVIVOCategory("MARKETING") // vivo 消息分类:运营消息
pushInfo.setAndroidHuaWeiCategory("MARKETING") // 华为消息分类:资讯营销
pushInfo.setAndroidHonorImportance("LOW") // 荣耀消息分类:资讯营销
pushInfo.setAndroidMeizuNotifyType(0) // 魅族消息分类:公信消息
pushInfo.setHarmonyCategory("MARKETING") // 鸿蒙消息分类:资讯营销

val message = V2TIMManager.getMessageManager().createTextMessage("您有一条新的活动消息")
V2TIMManager.getMessageManager().sendMessage(
message,
"<TARGET_USER_ID>", // 单聊填对端 userID,群聊该参数填 null
null, // 群聊填 groupID,单聊该参数填 null
V2TIMMessage.V2TIM_PRIORITY_DEFAULT,
false,
pushInfo,
object : V2TIMSendCallback<V2TIMMessage> {
override fun onProgress(progress: Int) {}

override fun onSuccess(msg: V2TIMMessage) {
Log.d("TIMPush", ">>>>> sendMessage success, msgID = ${msg.msgID}")
}

override fun onError(code: Int, desc: String?) {
Log.e("TIMPush", ">>>>> sendMessage failed, code = $code, desc = $desc")
}
}
)
import ImSDK_Plus

let pushInfo = V2TIMOfflinePushInfo()
pushInfo.title = "离线推送标题"
pushInfo.desc = "离线推送内容"
// 透传字段,建议长度不超过 1k
pushInfo.ext = "{\\"entity\\":{\\"k1\\":\\"v1\\",\\"k2\\":\\"v2\\"}}"
pushInfo.iOSSound = "apns.mp3" // APNs 铃声文件名,带后缀
pushInfo.AndroidSound = "shake" // Android 铃声文件名,不带后缀
pushInfo.AndroidXiaoMiChannelID = "xiaomi_channel_id" // 小米通知类别,Android 8.0 以上不填写无法收到推送
pushInfo.AndroidOPPOCategory = "MARKETING" // OPPO 消息分类:内容与营销
pushInfo.AndroidVIVOCategory = "MARKETING" // vivo 消息分类:运营消息
pushInfo.AndroidHuaWeiCategory = "MARKETING" // 华为消息分类:资讯营销
pushInfo.AndroidHonorImportance = "LOW" // 荣耀消息分类:资讯营销
pushInfo.AndroidMeizuNotifyType = 0 // 魅族消息分类:公信消息
pushInfo.HarmonyCategory = "MARKETING" // 鸿蒙消息分类:资讯营销

guard let message = V2TIMManager.shared.createTextMessage(text: "您有一条新的活动消息") else { return }
V2TIMManager.shared.sendMessage(
message: message,
receiver: "<#TARGET_USER_ID#>", // 单聊填对端 userID,群聊该参数填 nil
groupID: nil, // 群聊填 groupID,单聊该参数填 nil
priority: .V2TIM_PRIORITY_DEFAULT,
onlineUserOnly: false,
offlinePushInfo: pushInfo,
progress: nil,
succ: {
print(">>>>> sendMessage success")
},
fail: { code, desc in
print(">>>>> sendMessage failed, code:\\(code), desc:\\(desc)")
}
)
// 1. 创建消息实例
const message = chat.createTextMessage({
to: '<TARGET_USER_ID>', // 单聊填对端 userID,群聊填 groupID
conversationType: TencentCloudChat.TYPES.CONV_C2C, // 群聊填 TencentCloudChat.TYPES.CONV_GROUP
payload: {
text: '您有一条新的活动消息'
}
});

// 2. 发送消息,通过 offlinePushInfo 设置离线推送参数
const promise = chat.sendMessage(message, {
offlinePushInfo: {
title: '离线推送标题',
description: '离线推送内容',
extension: '{"entity":{"k1":"v1","k2":"v2"}}', // 透传字段,建议长度不超过 1k
androidInfo: {
sound: 'shake', // 铃声文件名,不带后缀
XiaoMiChannelID: 'xiaomi_channel_id', // 小米通知类别,Android 8.0 以上不填写无法收到推送
OPPOCategory: 'MARKETING', // OPPO 消息分类:内容与营销
VIVOCategory: 'MARKETING', // vivo 消息分类:运营消息
HuaWeiCategory: 'MARKETING', // 华为消息分类:资讯营销
HonorImportance: 'LOW', // 荣耀消息分类:资讯营销
MeizuNotifyType: 0 // 魅族消息分类:公信消息
},
apnsInfo: {
sound: 'apns.mp3' // 铃声文件名,带后缀
}
}
});
promise.then((imResponse) => {
console.log('>>>>> sendMessage success', imResponse);
}).catch((imError) => {
console.warn('>>>>> sendMessage error:', imError);
});
final createRes = await TencentImSDKPlugin.v2TIMManager.v2TIMMessageManager
.createTextMessage(text: '您有一条新的活动消息');

final message = createRes.data?.messageInfo;
if (createRes.code != 0 || message == null) {
debugPrint('createTextMessage failed: code=${createRes.code}');
return;
}

final sendRes = await TencentImSDKPlugin.v2TIMManager.v2TIMMessageManager
.sendMessage(
message: message,
receiver: '<TARGET_USER_ID>', // 单聊填对端 userID,群聊该参数填空字符串
groupID: '', // 群聊填 groupID,单聊该参数填空字符串
priority: MessagePriorityEnum.V2TIM_PRIORITY_NORMAL,
onlineUserOnly: false,
offlinePushInfo: OfflinePushInfo(
title: '离线推送标题',
desc: '离线推送内容',
ext: '{"entity":{"k1":"v1","k2":"v2"}}', // 透传字段,建议长度不超过 1k
iOSSound: 'apns.mp3', // APNs 铃声文件名,带后缀
androidSound: 'shake', // Android 铃声文件名,不带后缀
androidXiaoMiChannelID: 'xiaomi_channel_id', // 小米通知类别,Android 8.0 以上不填写无法收到推送
androidOPPOCategory: 'MARKETING', // OPPO 消息分类:内容与营销
androidVIVOCategory: 'MARKETING', // vivo 消息分类:运营消息
androidHuaWeiCategory: 'MARKETING', // 华为消息分类:资讯营销
androidHonorImportance: 'LOW', // 荣耀消息分类:资讯营销
androidMeizuNotifyType: 0, // 魅族消息分类:公信消息
harmonyCategory: 'MARKETING', // 鸿蒙消息分类:资讯营销
),
);

debugPrint('sendMessage result: code=${sendRes.code}, desc=${sendRes.desc}');
// React Native 使用 @tencentcloud/chat SDK 发送消息
// 1. 创建消息实例
const message = chat.createTextMessage({
to: '<TARGET_USER_ID>', // 单聊填对端 userID,群聊填 groupID
conversationType: TencentCloudChat.TYPES.CONV_C2C, // 群聊填 TencentCloudChat.TYPES.CONV_GROUP
payload: {
text: '您有一条新的活动消息'
}
});

// 2. 发送消息,通过 offlinePushInfo 设置离线推送参数
const promise = chat.sendMessage(message, {
offlinePushInfo: {
title: '离线推送标题',
description: '离线推送内容',
extension: '{"entity":{"k1":"v1","k2":"v2"}}', // 透传字段,建议长度不超过 1k
androidInfo: {
sound: 'shake', // 铃声文件名,不带后缀
XiaoMiChannelID: 'xiaomi_channel_id', // 小米通知类别,Android 8.0 以上不填写无法收到推送
OPPOCategory: 'MARKETING', // OPPO 消息分类:内容与营销
VIVOCategory: 'MARKETING', // vivo 消息分类:运营消息
HuaWeiCategory: 'MARKETING', // 华为消息分类:资讯营销
HonorImportance: 'LOW', // 荣耀消息分类:资讯营销
MeizuNotifyType: 0 // 魅族消息分类:公信消息
},
apnsInfo: {
sound: 'apns.mp3' // 铃声文件名,带后缀
}
}
});
promise.then((imResponse) => {
console.log('>>>>> sendMessage success', imResponse);
}).catch((imError) => {
console.warn('>>>>> sendMessage error:', imError);
});
const pushInfo = new V2TIMOfflinePushInfo();
pushInfo.title = '离线推送标题';
pushInfo.desc = '离线推送内容';
// 透传字段,建议长度不超过 1k
pushInfo.ext = '{"entity":{"k1":"v1","k2":"v2"}}';
pushInfo.HarmonyCategory = 'MARKETING'; // 鸿蒙消息分类:资讯营销
pushInfo.AndroidSound = 'shake'; // Android 铃声文件名,不带后缀
pushInfo.AndroidXiaoMiChannelID = 'xiaomi_channel_id'; // 小米通知类别,Android 8.0 以上不填写无法收到推送
pushInfo.AndroidOPPOCategory = 'MARKETING'; // OPPO 消息分类:内容与营销
pushInfo.AndroidVIVOCategory = 'MARKETING'; // vivo 消息分类:运营消息
pushInfo.AndroidHuaWeiCategory = 'MARKETING'; // 华为消息分类:资讯营销
pushInfo.AndroidHonorImportance = 'LOW'; // 荣耀消息分类:资讯营销
pushInfo.AndroidMeizuNotifyType = 0; // 魅族消息分类:公信消息
pushInfo.iOSSound = 'apns.mp3'; // APNs 铃声文件名,带后缀

const message = V2TIMManager.getMessageManager().createTextMessage('您有一条新的活动消息');
const result = V2TIMManager.getMessageManager().sendMessage(message, {
receiver: '<TARGET_USER_ID>', // 单聊填对端 userID,群聊使用 groupID
onlineUserOnly: false,
offlinePushInfo: pushInfo
});
result.promise.then(() => {
console.log('>>>>> sendMessage success');
}).catch((err: Error) => {
console.error('>>>>> sendMessage failed', err);
});
Unity SDK 的 OfflinePushConfig 暂不支持设置厂商消息分类字段,厂商分类请在控制台证书页面配置默认值。
Message message = new Message
{
message_conv_id = "<TARGET_USER_ID>",
message_conv_type = TIMConvType.kTIMConv_C2C,
message_elem_array = new List<Elem>
{
new Elem
{
elem_type = TIMElemType.kTIMElem_Text,
text_elem_content = "您有一条新的活动消息"
}
},
// 离线推送配置
message_offlie_push_config = new OfflinePushConfig
{
offline_push_config_desc = "离线推送内容",
// 透传字段,建议长度不超过 1k
offline_push_config_ext = "{\\"entity\\":{\\"k1\\":\\"v1\\",\\"k2\\":\\"v2\\"}}",
offline_push_config_android_config = new AndroidOfflinePushConfig
{
android_offline_push_config_title = "离线推送标题",
android_offline_push_config_sound = "shake" // 铃声文件名,不带后缀
},
offline_push_config_ios_config = new IOSOfflinePushConfig
{
ios_offline_push_config_title = "离线推送标题",
ios_offline_push_config_sound = "apns.mp3" // 铃声文件名,带后缀
}
}
};

StringBuilder messageID = new StringBuilder(128);
TIMResult result = TencentIMSDK.MsgSendMessage("<TARGET_USER_ID>", TIMConvType.kTIMConv_C2C, message, messageID,
(int code, string desc, string data, string userData) =>
{
Debug.Log(code == 0
? ">>>>> sendMessage success"
: $">>>>> sendMessage failed, code = {code}, desc = {desc}");
});
V2TIMOfflinePushInfo offlinePushInfo;
offlinePushInfo.title = "离线推送标题";
offlinePushInfo.desc = "离线推送内容";
// 透传字段,建议长度不超过 1k
offlinePushInfo.ext = "{\\"entity\\":{\\"k1\\":\\"v1\\",\\"k2\\":\\"v2\\"}}";
offlinePushInfo.iOSSound = "apns.mp3"; // APNs 铃声文件名,带后缀
offlinePushInfo.AndroidSound = "shake"; // Android 铃声文件名,不带后缀
offlinePushInfo.AndroidXiaoMiChannelID = "xiaomi_channel_id"; // 小米通知类别,Android 8.0 以上不填写无法收到推送
offlinePushInfo.AndroidOPPOCategory = "MARKETING"; // OPPO 消息分类:内容与营销
offlinePushInfo.AndroidVIVOCategory = "MARKETING"; // vivo 消息分类:运营消息
offlinePushInfo.AndroidHuaWeiCategory = "MARKETING"; // 华为消息分类:资讯营销
offlinePushInfo.AndroidHonorImportance = "LOW"; // 荣耀消息分类:资讯营销
offlinePushInfo.AndroidMeizuNotifyType = 0; // 魅族消息分类:公信消息
offlinePushInfo.HarmonyCategory = "MARKETING"; // 鸿蒙消息分类:资讯营销

V2TIMMessage message = V2TIMManager::GetInstance()->GetMessageManager()->CreateTextMessage("您有一条新的活动消息");

class SendMessageCallback : public V2TIMSendCallback {
public:
void OnProgress(uint32_t progress) override {}
void OnSuccess(const V2TIMMessage& message) override {
UE_LOG(LogTemp, Log, TEXT(">>>>> sendMessage success"));
}
void OnError(int error_code, const V2TIMString& error_message) override {
UE_LOG(LogTemp, Warning, TEXT(">>>>> sendMessage failed, code: %d"), error_code);
}
};

V2TIMManager::GetInstance()->GetMessageManager()->SendMessage(
message,
"<TARGET_USER_ID>", // 单聊填对端 userID,群聊该参数填空字符串
"", // 群聊填 groupID,单聊该参数填空字符串
V2TIM_PRIORITY_DEFAULT,
false,
offlinePushInfo,
new SendMessageCallback()
);
微信小程序内暂不支持厂商通道离线推送;使用微信小程序多端框架将小程序打包成 App 后,需先完成对应原生平台的推送前提配置,发送侧可通过 @tencentcloud/chat SDK 设置离线推送参数:
// 1. 创建消息实例
const message = chat.createTextMessage({
to: '<TARGET_USER_ID>', // 单聊填对端 userID,群聊填 groupID
conversationType: TencentCloudChat.TYPES.CONV_C2C, // 群聊填 TencentCloudChat.TYPES.CONV_GROUP
payload: {
text: '您有一条新的活动消息'
}
});

// 2. 发送消息,通过 offlinePushInfo 设置离线推送参数
const promise = chat.sendMessage(message, {
offlinePushInfo: {
title: '离线推送标题',
description: '离线推送内容',
extension: '{"entity":{"k1":"v1","k2":"v2"}}', // 透传字段,建议长度不超过 1k
androidInfo: {
sound: 'shake', // 铃声文件名,不带后缀
XiaoMiChannelID: 'xiaomi_channel_id', // 小米通知类别,Android 8.0 以上不填写无法收到推送
OPPOCategory: 'MARKETING', // OPPO 消息分类:内容与营销
VIVOCategory: 'MARKETING', // vivo 消息分类:运营消息
HuaWeiCategory: 'MARKETING', // 华为消息分类:资讯营销
HonorImportance: 'LOW', // 荣耀消息分类:资讯营销
MeizuNotifyType: 0 // 魅族消息分类:公信消息
},
apnsInfo: {
sound: 'apns.mp3' // 铃声文件名,带后缀
}
}
});
promise.then((imResponse) => {
console.log('>>>>> sendMessage success', imResponse);
}).catch((imError) => {
console.warn('>>>>> sendMessage error:', imError);
});
Android
iOS
uni-app
Flutter
React Native
HarmonyOS
Unity
Unreal Engine
微信小程序
import android.util.Log
import com.google.gson.Gson
import com.tencent.imsdk.v2.V2TIMManager
import com.tencent.imsdk.v2.V2TIMMessage
import com.tencent.imsdk.v2.V2TIMOfflinePushInfo
import com.tencent.imsdk.v2.V2TIMSendCallback

val pushInfo = V2TIMOfflinePushInfo()
pushInfo.title = "离线推送标题"
pushInfo.desc = "离线推送内容"
// 透传字段,建议长度不超过 1k
pushInfo.ext = "{\\"entity\\":{\\"k1\\":\\"v1\\",\\"k2\\":\\"v2\\"}}".toByteArray()
pushInfo.androidSound = "shake" // 铃声文件名,不带后缀
pushInfo.setAndroidVIVOCategory("IM") // vivo 消息分类:系统消息
pushInfo.setAndroidHuaWeiCategory("IM") // 华为消息分类:服务与通讯
pushInfo.setAndroidHonorImportance("NORMAL") // 荣耀消息分类:服务通讯
pushInfo.setAndroidMeizuNotifyType(1) // 魅族消息分类:私信消息
pushInfo.setAndroidXiaoMiChannelID("xiaomi_channel_id") // 小米通知类别,Android 8.0 以上不填写无法收到推送
pushInfo.setAndroidOPPOCategory("IM") // OPPO 消息分类:通讯与服务
pushInfo.setHarmonyCategory("IM") // 鸿蒙消息分类:服务与通讯

// 小米私信模板、OPPO 私信模板参数通过 vendorParams 设置
val vendorParams = mapOf(
"xiaomiTemplateId" to "xxxx", // 小米私信消息模板 ID
"xiaomiTemplateParam" to Gson().toJson(mapOf("keywords1" to "k1")), // 小米私信消息模板填充参数
"oppoTemplateId" to "xxxx", // OPPO 私信消息模板 ID
"oppoTitleParam" to Gson().toJson(mapOf("k1" to "v1")), // OPPO 私信消息标题模板填充参数
"oppoContentParam" to Gson().toJson(mapOf("k1" to "v1")) // OPPO 私信消息内容模板填充参数
)
pushInfo.vendorParams = Gson().toJson(vendorParams)

val message = V2TIMManager.getMessageManager().createTextMessage("您有一条新的聊天消息")
V2TIMManager.getMessageManager().sendMessage(
message,
"<TARGET_USER_ID>", // 单聊填对端 userID,群聊该参数填 null
null, // 群聊填 groupID,单聊该参数填 null
V2TIMMessage.V2TIM_PRIORITY_DEFAULT,
false,
pushInfo,
object : V2TIMSendCallback<V2TIMMessage> {
override fun onProgress(progress: Int) {}

override fun onSuccess(msg: V2TIMMessage) {
Log.d("TIMPush", ">>>>> sendMessage success, msgID = ${msg.msgID}")
}

override fun onError(code: Int, desc: String?) {
Log.e("TIMPush", ">>>>> sendMessage failed, code = $code, desc = $desc")
}
}
)
import ImSDK_Plus

let pushInfo = V2TIMOfflinePushInfo()
pushInfo.title = "离线推送标题"
pushInfo.desc = "离线推送内容"
// 透传字段,建议长度不超过 1k
pushInfo.ext = "{\\"entity\\":{\\"k1\\":\\"v1\\",\\"k2\\":\\"v2\\"}}"
pushInfo.iOSSound = "apns.mp3" // APNs 铃声文件名,带后缀
pushInfo.AndroidSound = "shake" // Android 铃声文件名,不带后缀
pushInfo.AndroidVIVOCategory = "IM" // vivo 消息分类:系统消息
pushInfo.AndroidHuaWeiCategory = "IM" // 华为消息分类:服务与通讯
pushInfo.AndroidHonorImportance = "NORMAL" // 荣耀消息分类:服务通讯
pushInfo.AndroidMeizuNotifyType = 1 // 魅族消息分类:私信消息
pushInfo.AndroidXiaoMiChannelID = "xiaomi_channel_id" // 小米通知类别,Android 8.0 以上不填写无法收到推送
pushInfo.AndroidOPPOCategory = "IM" // OPPO 消息分类:通讯与服务
pushInfo.HarmonyCategory = "IM" // 鸿蒙消息分类:服务与通讯

// 小米私信模板、OPPO 私信模板参数通过 vendorParams 设置
let vendorParams: [String: Any] = [
"xiaomiTemplateId": "xxxx", // 小米私信消息模板 ID
"xiaomiTemplateParam": "{\\"keywords1\\":\\"k1\\"}", // 小米私信消息模板填充参数
"oppoTemplateId": "xxxx", // OPPO 私信消息模板 ID
"oppoTitleParam": "{\\"k1\\":\\"v1\\"}", // OPPO 私信消息标题模板填充参数
"oppoContentParam": "{\\"k1\\":\\"v1\\"}" // OPPO 私信消息内容模板填充参数
]
if let vendorParamsData = try? JSONSerialization.data(withJSONObject: vendorParams),
let vendorParamsJson = String(data: vendorParamsData, encoding: .utf8) {
pushInfo.vendorParams = vendorParamsJson
}

guard let message = V2TIMManager.shared.createTextMessage(text: "您有一条新的聊天消息") else { return }
V2TIMManager.shared.sendMessage(
message: message,
receiver: "<#TARGET_USER_ID#>", // 单聊填对端 userID,群聊该参数填 nil
groupID: nil, // 群聊填 groupID,单聊该参数填 nil
priority: .V2TIM_PRIORITY_DEFAULT,
onlineUserOnly: false,
offlinePushInfo: pushInfo,
progress: nil,
succ: {
print(">>>>> sendMessage success")
},
fail: { code, desc in
print(">>>>> sendMessage failed, code:\\(code), desc:\\(desc)")
}
)
小米、OPPO 私信模板 ID 及模板参数请在控制台证书页面配置,SDK 暂不支持接口传入。
// 1. 创建消息实例
const message = chat.createTextMessage({
to: '<TARGET_USER_ID>', // 单聊填对端 userID,群聊填 groupID
conversationType: TencentCloudChat.TYPES.CONV_C2C, // 群聊填 TencentCloudChat.TYPES.CONV_GROUP
payload: {
text: '您有一条新的聊天消息'
}
});

// 2. 发送消息,通过 offlinePushInfo 设置离线推送参数
const promise = chat.sendMessage(message, {
offlinePushInfo: {
title: '离线推送标题',
description: '离线推送内容',
extension: '{"entity":{"k1":"v1","k2":"v2"}}', // 透传字段,建议长度不超过 1k
androidInfo: {
sound: 'shake', // 铃声文件名,不带后缀
VIVOCategory: 'IM', // vivo 消息分类:系统消息
HuaWeiCategory: 'IM', // 华为消息分类:服务与通讯
HonorImportance: 'NORMAL', // 荣耀消息分类:服务通讯
MeizuNotifyType: 1, // 魅族消息分类:私信消息
XiaoMiChannelID: 'xiaomi_channel_id', // 小米通知类别,Android 8.0 以上不填写无法收到推送
OPPOCategory: 'IM' // OPPO 消息分类:通讯与服务
},
apnsInfo: {
sound: 'apns.mp3' // 铃声文件名,带后缀
}
}
});
promise.then((imResponse) => {
console.log('>>>>> sendMessage success', imResponse);
}).catch((imError) => {
console.warn('>>>>> sendMessage error:', imError);
});
final createRes = await TencentImSDKPlugin.v2TIMManager.v2TIMMessageManager
.createTextMessage(text: '您有一条新的聊天消息');

final message = createRes.data?.messageInfo;
if (createRes.code != 0 || message == null) {
debugPrint('createTextMessage failed: code=${createRes.code}');
return;
}

final sendRes = await TencentImSDKPlugin.v2TIMManager.v2TIMMessageManager
.sendMessage(
message: message,
receiver: '<TARGET_USER_ID>', // 单聊填对端 userID,群聊该参数填空字符串
groupID: '', // 群聊填 groupID,单聊该参数填空字符串
priority: MessagePriorityEnum.V2TIM_PRIORITY_NORMAL,
onlineUserOnly: false,
offlinePushInfo: OfflinePushInfo(
title: '离线推送标题',
desc: '离线推送内容',
ext: '{"entity":{"k1":"v1","k2":"v2"}}', // 透传字段,建议长度不超过 1k
iOSSound: 'apns.mp3', // APNs 铃声文件名,带后缀
androidSound: 'shake', // Android 铃声文件名,不带后缀
androidVIVOCategory: 'IM', // vivo 消息分类:系统消息
androidHuaWeiCategory: 'IM', // 华为消息分类:服务与通讯
androidHonorImportance: 'NORMAL', // 荣耀消息分类:服务通讯
androidMeizuNotifyType: 1, // 魅族消息分类:私信消息
androidXiaoMiChannelID: 'xiaomi_channel_id', // 小米通知类别,Android 8.0 以上不填写无法收到推送
androidOPPOCategory: 'IM', // OPPO 消息分类:通讯与服务
harmonyCategory: 'IM', // 鸿蒙消息分类:服务与通讯
// 小米私信模板、OPPO 私信模板参数通过 vendorParams 设置
vendorParams: jsonEncode({
'xiaomiTemplateId': 'xxxx', // 小米私信消息模板 ID
'xiaomiTemplateParam': jsonEncode({'keywords1': 'k1'}), // 小米私信消息模板填充参数
'oppoTemplateId': 'xxxx', // OPPO 私信消息模板 ID
'oppoTitleParam': jsonEncode({'k1': 'v1'}), // OPPO 私信消息标题模板填充参数
'oppoContentParam': jsonEncode({'k1': 'v1'}), // OPPO 私信消息内容模板填充参数
}),
),
);

debugPrint('sendMessage result: code=${sendRes.code}, desc=${sendRes.desc}');
小米、OPPO 私信模板 ID 及模板参数请在控制台证书页面配置,SDK 暂不支持接口传入。
// React Native 使用 @tencentcloud/chat SDK 发送消息
// 1. 创建消息实例
const message = chat.createTextMessage({
to: '<TARGET_USER_ID>', // 单聊填对端 userID,群聊填 groupID
conversationType: TencentCloudChat.TYPES.CONV_C2C, // 群聊填 TencentCloudChat.TYPES.CONV_GROUP
payload: {
text: '您有一条新的聊天消息'
}
});

// 2. 发送消息,通过 offlinePushInfo 设置离线推送参数
const promise = chat.sendMessage(message, {
offlinePushInfo: {
title: '离线推送标题',
description: '离线推送内容',
extension: '{"entity":{"k1":"v1","k2":"v2"}}', // 透传字段,建议长度不超过 1k
androidInfo: {
sound: 'shake', // 铃声文件名,不带后缀
VIVOCategory: 'IM', // vivo 消息分类:系统消息
HuaWeiCategory: 'IM', // 华为消息分类:服务与通讯
HonorImportance: 'NORMAL', // 荣耀消息分类:服务通讯
MeizuNotifyType: 1, // 魅族消息分类:私信消息
XiaoMiChannelID: 'xiaomi_channel_id', // 小米通知类别,Android 8.0 以上不填写无法收到推送
OPPOCategory: 'IM' // OPPO 消息分类:通讯与服务
},
apnsInfo: {
sound: 'apns.mp3' // 铃声文件名,带后缀
}
}
});
promise.then((imResponse) => {
console.log('>>>>> sendMessage success', imResponse);
}).catch((imError) => {
console.warn('>>>>> sendMessage error:', imError);
});
const pushInfo = new V2TIMOfflinePushInfo();
pushInfo.title = '离线推送标题';
pushInfo.desc = '离线推送内容';
// 透传字段,建议长度不超过 1k
pushInfo.ext = '{"entity":{"k1":"v1","k2":"v2"}}';
pushInfo.HarmonyCategory = 'IM'; // 鸿蒙消息分类:服务与通讯
pushInfo.AndroidSound = 'shake'; // Android 铃声文件名,不带后缀
pushInfo.AndroidXiaoMiChannelID = 'xiaomi_channel_id'; // 小米通知类别,Android 8.0 以上不填写无法收到推送
pushInfo.AndroidOPPOCategory = 'IM'; // OPPO 消息分类:通讯与服务
pushInfo.AndroidVIVOCategory = 'IM'; // vivo 消息分类:系统消息
pushInfo.AndroidHuaWeiCategory = 'IM'; // 华为消息分类:服务与通讯
pushInfo.AndroidHonorImportance = 'NORMAL'; // 荣耀消息分类:服务通讯
pushInfo.AndroidMeizuNotifyType = 1; // 魅族消息分类:私信消息
pushInfo.iOSSound = 'apns.mp3'; // APNs 铃声文件名,带后缀

// 小米私信模板、OPPO 私信模板参数通过 vendorParams 设置
pushInfo.vendorParams = JSON.stringify({
xiaomiTemplateId: 'xxxx', // 小米私信消息模板 ID
xiaomiTemplateParam: JSON.stringify({ keywords1: 'k1' }), // 小米私信消息模板填充参数
oppoTemplateId: 'xxxx', // OPPO 私信消息模板 ID
oppoTitleParam: JSON.stringify({ k1: 'v1' }), // OPPO 私信消息标题模板填充参数
oppoContentParam: JSON.stringify({ k1: 'v1' }) // OPPO 私信消息内容模板填充参数
});

const message = V2TIMManager.getMessageManager().createTextMessage('您有一条新的聊天消息');
const result = V2TIMManager.getMessageManager().sendMessage(message, {
receiver: '<TARGET_USER_ID>', // 单聊填对端 userID,群聊使用 groupID
onlineUserOnly: false,
offlinePushInfo: pushInfo
});
result.promise.then(() => {
console.log('>>>>> sendMessage success');
}).catch((err: Error) => {
console.error('>>>>> sendMessage failed', err);
});
Unity SDK 的 OfflinePushConfig 暂不支持设置厂商消息分类字段,厂商分类请在控制台证书页面配置默认值(即时通信场景推荐配置为服务与通讯类)。
Message message = new Message
{
message_conv_id = "<TARGET_USER_ID>",
message_conv_type = TIMConvType.kTIMConv_C2C,
message_elem_array = new List<Elem>
{
new Elem
{
elem_type = TIMElemType.kTIMElem_Text,
text_elem_content = "您有一条新的聊天消息"
}
},
// 离线推送配置
message_offlie_push_config = new OfflinePushConfig
{
offline_push_config_desc = "离线推送内容",
// 透传字段,建议长度不超过 1k
offline_push_config_ext = "{\\"entity\\":{\\"k1\\":\\"v1\\",\\"k2\\":\\"v2\\"}}",
offline_push_config_android_config = new AndroidOfflinePushConfig
{
android_offline_push_config_title = "离线推送标题",
android_offline_push_config_sound = "shake" // 铃声文件名,不带后缀
},
offline_push_config_ios_config = new IOSOfflinePushConfig
{
ios_offline_push_config_title = "离线推送标题",
ios_offline_push_config_sound = "apns.mp3" // 铃声文件名,带后缀
}
}
};

StringBuilder messageID = new StringBuilder(128);
TIMResult result = TencentIMSDK.MsgSendMessage("<TARGET_USER_ID>", TIMConvType.kTIMConv_C2C, message, messageID,
(int code, string desc, string data, string userData) =>
{
Debug.Log(code == 0
? ">>>>> sendMessage success"
: $">>>>> sendMessage failed, code = {code}, desc = {desc}");
});
V2TIMOfflinePushInfo offlinePushInfo;
offlinePushInfo.title = "离线推送标题";
offlinePushInfo.desc = "离线推送内容";
// 透传字段,建议长度不超过 1k
offlinePushInfo.ext = "{\\"entity\\":{\\"k1\\":\\"v1\\",\\"k2\\":\\"v2\\"}}";
offlinePushInfo.iOSSound = "apns.mp3"; // APNs 铃声文件名,带后缀
offlinePushInfo.AndroidSound = "shake"; // Android 铃声文件名,不带后缀
offlinePushInfo.AndroidVIVOCategory = "IM"; // vivo 消息分类:系统消息
offlinePushInfo.AndroidHuaWeiCategory = "IM"; // 华为消息分类:服务与通讯
offlinePushInfo.AndroidHonorImportance = "NORMAL"; // 荣耀消息分类:服务通讯
offlinePushInfo.AndroidMeizuNotifyType = 1; // 魅族消息分类:私信消息
offlinePushInfo.AndroidXiaoMiChannelID = "xiaomi_channel_id"; // 小米通知类别,Android 8.0 以上不填写无法收到推送
offlinePushInfo.AndroidOPPOCategory = "IM"; // OPPO 消息分类:通讯与服务
offlinePushInfo.HarmonyCategory = "IM"; // 鸿蒙消息分类:服务与通讯

// 小米私信模板、OPPO 私信模板参数通过 vendorParams 设置(JSON 字符串)
std::string vendorParams = R"({
"xiaomiTemplateId": "xxxx",
"xiaomiTemplateParam": "{\\"keywords1\\":\\"k1\\"}",
"oppoTemplateId": "xxxx",
"oppoTitleParam": "{\\"k1\\":\\"v1\\"}",
"oppoContentParam": "{\\"k1\\":\\"v1\\"}"
})";
offlinePushInfo.vendorParams = vendorParams;

V2TIMMessage message = V2TIMManager::GetInstance()->GetMessageManager()->CreateTextMessage("您有一条新的聊天消息");

class SendMessageCallback : public V2TIMSendCallback {
public:
void OnProgress(uint32_t progress) override {}
void OnSuccess(const V2TIMMessage& message) override {
UE_LOG(LogTemp, Log, TEXT(">>>>> sendMessage success"));
}
void OnError(int error_code, const V2TIMString& error_message) override {
UE_LOG(LogTemp, Warning, TEXT(">>>>> sendMessage failed, code: %d"), error_code);
}
};

V2TIMManager::GetInstance()->GetMessageManager()->SendMessage(
message,
"<TARGET_USER_ID>", // 单聊填对端 userID,群聊该参数填空字符串
"", // 群聊填 groupID,单聊该参数填空字符串
V2TIM_PRIORITY_DEFAULT,
false,
offlinePushInfo,
new SendMessageCallback()
);
微信小程序内暂不支持厂商通道离线推送;使用微信小程序多端框架将小程序打包成 App 后,需先完成对应原生平台的推送前提配置,发送侧可通过 @tencentcloud/chat SDK 设置离线推送参数。小米、OPPO 私信模板 ID 及模板参数请在控制台证书页面配置,SDK 暂不支持接口传入。
// 1. 创建消息实例
const message = chat.createTextMessage({
to: '<TARGET_USER_ID>', // 单聊填对端 userID,群聊填 groupID
conversationType: TencentCloudChat.TYPES.CONV_C2C, // 群聊填 TencentCloudChat.TYPES.CONV_GROUP
payload: {
text: '您有一条新的聊天消息'
}
});

// 2. 发送消息,通过 offlinePushInfo 设置离线推送参数
const promise = chat.sendMessage(message, {
offlinePushInfo: {
title: '离线推送标题',
description: '离线推送内容',
extension: '{"entity":{"k1":"v1","k2":"v2"}}', // 透传字段,建议长度不超过 1k
androidInfo: {
sound: 'shake', // 铃声文件名,不带后缀
VIVOCategory: 'IM', // vivo 消息分类:系统消息
HuaWeiCategory: 'IM', // 华为消息分类:服务与通讯
HonorImportance: 'NORMAL', // 荣耀消息分类:服务通讯
MeizuNotifyType: 1, // 魅族消息分类:私信消息
XiaoMiChannelID: 'xiaomi_channel_id', // 小米通知类别,Android 8.0 以上不填写无法收到推送
OPPOCategory: 'IM' // OPPO 消息分类:通讯与服务
},
apnsInfo: {
sound: 'apns.mp3' // 铃声文件名,带后缀
}
}
});
promise.then((imResponse) => {
console.log('>>>>> sendMessage success', imResponse);
}).catch((imError) => {
console.warn('>>>>> sendMessage error:', imError);
});
说明:
接口传入值优先级高于控制台默认值,且只对当前消息生效。