自分类规则与权益申请
根据推送内容进行分类管理,不同厂商叫法不一样,但整体都可以理解为两类:
高时效分类:适用于聊天、音视频呼叫、订单、交易等及时触达场景,通常不限推送额度,但须向厂商申请自分类权益并通过审核后使用。
普通分类:活动营销、内容推荐、资讯、广告、平台公告等非紧急场景,通常限制每台设备每天接收约 2~5 条。
禁止:
使用时应严格按照消息的真实业务场景选择分类,避免将运营或营销消息配置为高时效分类,违反分类标准的场景将会被厂商处罚。
厂商 | 消息分类规则 | 推送分类 | 单设备日推送限制 | 自分类权益申请 |
华为 | 服务与通讯类 | 不限量 | ||
| | 资讯营销类 | 新闻阅读 5 条,其他消息 2 条 | 无需申请 |
荣耀 | 服务与通讯类 | 不限量 | ||
| | 资讯营销类 | 新闻阅读 5 条,其他消息 2 条 | 无需申请 |
小米 | 私信消息 | 不限量 | 申请私信模板 | |
| | 公信消息 | 5~8条 | |
OPPO | 通讯与服务类 | 不限量 | ||
| | 内容与营销类 | 新闻阅读 5 条,其他消息 2 条 | 无需申请 |
vivo | 系统消息 | 不限量 | ||
| | 运营消息 | 新闻阅读 5 条,其他消息 2 条 | 无需申请 |
鸿蒙 | 服务与通讯类 | 根据实际情况进行管控 | ||
| | 资讯营销类 | 新闻阅读 5 条,其他消息 2 条 | 无需申请 |
魅族 | 私信消息 | 不限量 | 无需申请 | |
| | 公信消息 | 资讯阅读 5 条,其他消息 3 条 | |
消息分类字段取值说明
本章按厂商列出消息分类字段的合法取值,供您在控制台配置默认分类、或通过 API 为单条消息指定分类时查阅。部分取值(例如服务与通讯类、私信模板)需先在厂商后台申请相应权益,申请方式见各厂商小节。
资讯营销类:无需申请,设置
HuaWeiCategory 即可,详细参见 华为云端通知 category 取值;服务与通讯类:申请 华为自分类权益,设置
HuaWeiCategory。消息大类 | 消息类型 | Category 取值 |
服务与通讯 | 即时聊天 | IM |
| 音频、视频通话 | VOIP |
| 订阅 | SUBSCRIPTION |
| 出行 | TRAVEL |
| 健康 | HEALTH |
| 工作事项提醒 | WORK |
| 账号动态 | ACCOUNT |
| 订单&物流 | EXPRESS |
| 财务 | FINANCE |
| 设备提醒 | DEVICE_REMINDER |
| 邮件 | MAIL |
资讯营销 | 内容推荐、新闻、财经动态、生活资讯、调研、社交动态、产品促销、功能推荐、运营活动等 | MARKETING |
资讯营销类:无需申请,设置
HonorImportance 为 LOW (默认展示方式为静默通知,仅在下拉通知栏展示);服务通讯类:申请 荣耀自分类权益,设置
HonorImportance 为 NORMAL (默认展示方式为锁屏展示+下拉通知栏展示)。 公信消息: 申请 channel,设置
XiaoMiChannelID(通知类别 ID);私信消息: 申请 channel 和 私信模板,设置
XiaoMiChannelID、XiaoMiTemplateId(模板 ID)、XiaoMiTemplateParam(模板变量)。

内容与营销类:无需申请,设置
OPPOCategory 即可,详细参见 OPPO category 取值;通讯与服务类:申请 私信模板,设置
OPPOCategory、OPPOPrivateMsgTemplateId(模板 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 |
公信消息:无需申请,设置
MeiZuNoticeMsgType 为 0 ,详细参见 魅族推送消息新规文档;私信消息:无需申请,设置
MeiZuNoticeMsgType 为 1 。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 > 基础配置 > 对应厂商证书 > 编辑







如果某条消息需要使用其他分类,例如活动通知、营销通知、订单通知,可以在当前消息的
V2TIMOfflinePushInfo 中显式传入厂商分类字段。示例代码如下:import android.util.Logimport com.tencent.imsdk.v2.V2TIMManagerimport com.tencent.imsdk.v2.V2TIMMessageimport com.tencent.imsdk.v2.V2TIMOfflinePushInfoimport com.tencent.imsdk.v2.V2TIMSendCallbackval pushInfo = V2TIMOfflinePushInfo()pushInfo.title = "离线推送标题"pushInfo.desc = "离线推送内容"// 透传字段,建议长度不超过 1kpushInfo.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,群聊该参数填 nullnull, // 群聊填 groupID,单聊该参数填 nullV2TIMMessage.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_Pluslet pushInfo = V2TIMOfflinePushInfo()pushInfo.title = "离线推送标题"pushInfo.desc = "离线推送内容"// 透传字段,建议长度不超过 1kpushInfo.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,群聊该参数填 nilgroupID: nil, // 群聊填 groupID,单聊该参数填 nilpriority: .V2TIM_PRIORITY_DEFAULT,onlineUserOnly: false,offlinePushInfo: pushInfo,progress: nil,succ: {print(">>>>> sendMessage success")},fail: { code, desc inprint(">>>>> sendMessage failed, code:\\(code), desc:\\(desc)")})
// 1. 创建消息实例const message = chat.createTextMessage({to: '<TARGET_USER_ID>', // 单聊填对端 userID,群聊填 groupIDconversationType: TencentCloudChat.TYPES.CONV_C2C, // 群聊填 TencentCloudChat.TYPES.CONV_GROUPpayload: {text: '您有一条新的活动消息'}});// 2. 发送消息,通过 offlinePushInfo 设置离线推送参数const promise = chat.sendMessage(message, {offlinePushInfo: {title: '离线推送标题',description: '离线推送内容',extension: '{"entity":{"k1":"v1","k2":"v2"}}', // 透传字段,建议长度不超过 1kandroidInfo: {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"}}', // 透传字段,建议长度不超过 1kiOSSound: '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,群聊填 groupIDconversationType: TencentCloudChat.TYPES.CONV_C2C, // 群聊填 TencentCloudChat.TYPES.CONV_GROUPpayload: {text: '您有一条新的活动消息'}});// 2. 发送消息,通过 offlinePushInfo 设置离线推送参数const promise = chat.sendMessage(message, {offlinePushInfo: {title: '离线推送标题',description: '离线推送内容',extension: '{"entity":{"k1":"v1","k2":"v2"}}', // 透传字段,建议长度不超过 1kandroidInfo: {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 = '离线推送内容';// 透传字段,建议长度不超过 1kpushInfo.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,群聊使用 groupIDonlineUserOnly: 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 = "离线推送内容",// 透传字段,建议长度不超过 1koffline_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 = "离线推送内容";// 透传字段,建议长度不超过 1kofflinePushInfo.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,群聊填 groupIDconversationType: TencentCloudChat.TYPES.CONV_C2C, // 群聊填 TencentCloudChat.TYPES.CONV_GROUPpayload: {text: '您有一条新的活动消息'}});// 2. 发送消息,通过 offlinePushInfo 设置离线推送参数const promise = chat.sendMessage(message, {offlinePushInfo: {title: '离线推送标题',description: '离线推送内容',extension: '{"entity":{"k1":"v1","k2":"v2"}}', // 透传字段,建议长度不超过 1kandroidInfo: {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);});
import android.util.Logimport com.google.gson.Gsonimport com.tencent.imsdk.v2.V2TIMManagerimport com.tencent.imsdk.v2.V2TIMMessageimport com.tencent.imsdk.v2.V2TIMOfflinePushInfoimport com.tencent.imsdk.v2.V2TIMSendCallbackval pushInfo = V2TIMOfflinePushInfo()pushInfo.title = "离线推送标题"pushInfo.desc = "离线推送内容"// 透传字段,建议长度不超过 1kpushInfo.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,群聊该参数填 nullnull, // 群聊填 groupID,单聊该参数填 nullV2TIMMessage.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_Pluslet pushInfo = V2TIMOfflinePushInfo()pushInfo.title = "离线推送标题"pushInfo.desc = "离线推送内容"// 透传字段,建议长度不超过 1kpushInfo.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,群聊该参数填 nilgroupID: nil, // 群聊填 groupID,单聊该参数填 nilpriority: .V2TIM_PRIORITY_DEFAULT,onlineUserOnly: false,offlinePushInfo: pushInfo,progress: nil,succ: {print(">>>>> sendMessage success")},fail: { code, desc inprint(">>>>> sendMessage failed, code:\\(code), desc:\\(desc)")})
小米、OPPO 私信模板 ID 及模板参数请在控制台证书页面配置,SDK 暂不支持接口传入。
// 1. 创建消息实例const message = chat.createTextMessage({to: '<TARGET_USER_ID>', // 单聊填对端 userID,群聊填 groupIDconversationType: TencentCloudChat.TYPES.CONV_C2C, // 群聊填 TencentCloudChat.TYPES.CONV_GROUPpayload: {text: '您有一条新的聊天消息'}});// 2. 发送消息,通过 offlinePushInfo 设置离线推送参数const promise = chat.sendMessage(message, {offlinePushInfo: {title: '离线推送标题',description: '离线推送内容',extension: '{"entity":{"k1":"v1","k2":"v2"}}', // 透传字段,建议长度不超过 1kandroidInfo: {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"}}', // 透传字段,建议长度不超过 1kiOSSound: '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,群聊填 groupIDconversationType: TencentCloudChat.TYPES.CONV_C2C, // 群聊填 TencentCloudChat.TYPES.CONV_GROUPpayload: {text: '您有一条新的聊天消息'}});// 2. 发送消息,通过 offlinePushInfo 设置离线推送参数const promise = chat.sendMessage(message, {offlinePushInfo: {title: '离线推送标题',description: '离线推送内容',extension: '{"entity":{"k1":"v1","k2":"v2"}}', // 透传字段,建议长度不超过 1kandroidInfo: {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 = '离线推送内容';// 透传字段,建议长度不超过 1kpushInfo.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', // 小米私信消息模板 IDxiaomiTemplateParam: JSON.stringify({ keywords1: 'k1' }), // 小米私信消息模板填充参数oppoTemplateId: 'xxxx', // OPPO 私信消息模板 IDoppoTitleParam: 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,群聊使用 groupIDonlineUserOnly: 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 = "离线推送内容",// 透传字段,建议长度不超过 1koffline_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 = "离线推送内容";// 透传字段,建议长度不超过 1kofflinePushInfo.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,群聊填 groupIDconversationType: TencentCloudChat.TYPES.CONV_C2C, // 群聊填 TencentCloudChat.TYPES.CONV_GROUPpayload: {text: '您有一条新的聊天消息'}});// 2. 发送消息,通过 offlinePushInfo 设置离线推送参数const promise = chat.sendMessage(message, {offlinePushInfo: {title: '离线推送标题',description: '离线推送内容',extension: '{"entity":{"k1":"v1","k2":"v2"}}', // 透传字段,建议长度不超过 1kandroidInfo: {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);});
说明:
接口传入值优先级高于控制台默认值,且只对当前消息生效。