即时通信 IM 厂商消息分类使用指南

这篇说说腾讯云IM推送的消息分类规则与权益申请方法,涵盖华为、荣耀等8家厂商的高时效与普通分类,以及通过REST API和客户端SDK设置分类字段的代码示例。 高时效分类(如聊天、交易)通常不限推送额度,但需向厂商申请自分类权益;普通分类(如营销)每日每设备限2-5条,无需申请。 各厂商分类字段取值不同,例如华为服务与通讯类需设置HuaWeiCategory为IM,荣耀需设置HonorImportance为NORMA。

相关产品
即时通信 IM 产品页,含版本规格、价格与购买入口。

自分类规则与权益申请

根据推送内容进行分类管理,不同厂商叫法不一样,但整体都可以理解为两类:

·高时效分类:适用于聊天、音视频呼叫、订单、交易等及时触达场景,通常不限推送额度,但须向厂商申请自分类权益并通过审核后使用。

·普通分类:活动营销、内容推荐、资讯、广告、平台公告等非紧急场景,通常限制每台设备每天接收约 2~5 条。

注意:禁止:

注意:使用时应严格按照消息的真实业务场景选择分类,避免将运营或营销消息配置为高时效分类,违反分类标准的场景将会被厂商处罚。

厂商 消息分类规则 推送分类 单设备日推送限制 自分类权益申请
华为 推送数量管理细则 服务与通讯类 不限量 华为自分类权益申请
  资讯营销类 新闻阅读 5 条,其他消息 2 条 无需申请
荣耀 消息分类方式 服务与通讯类 不限量 荣耀自分类权益申请
  资讯营销类 新闻阅读 5 条,其他消息 2 条 无需申请
小米 推送消息限制说明 私信消息 不限量 申请小米 channel申请私信模板
  公信消息 5~8条 申请小米 channel
OPPO 消息分类说明 通讯与服务类 不限量 私信模板校验能力接入说明
  内容与营销类 新闻阅读 5 条,其他消息 2 条 无需申请
vivo 推送消息分类说明 系统消息 不限量 系统消息归档申请
  运营消息 新闻阅读 5 条,其他消息 2 条 无需申请
鸿蒙 通知消息推送数量管理规则 服务与通讯类 根据实际情况进行管控 鸿蒙自分类权益申请
  资讯营销类 新闻阅读 5 条,其他消息 2 条 无需申请
魅族 魅族推送消息新规文档 私信消息 不限量 无需申请
  公信消息 资讯阅读 5 条,其他消息 3 条 

消息分类字段取值说明

本章按厂商列出消息分类字段的合法取值,供你在控制台配置默认分类、或通过 API 为单条消息指定分类时查阅。部分取值(例如服务与通讯类、私信模板)需先在厂商后台申请相应权益,申请方式见各厂商小节。

华为荣耀小米OPPOvivo鸿蒙魅族

·资讯营销类:无需申请,设置 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 > 基础配置 > 对应厂商证书 > 编辑

华为荣耀小米OPPOvivo鸿蒙魅族

如果某条消息需要使用其他分类,例如活动通知、营销通知、订单通知,可以在当前消息的 V2TIMOfflinePushInfo 中显式传入厂商分类字段。示例代码如下:

营销资讯类推送示例即时通信类推送示例AndroidiOSuni-appFlutterReact NativeHarmonyOSUnityUnreal Engine微信小程序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,群聊该参数填 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_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,群聊该参数填 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 = '离线推送内容';// 透传字段,建议长度不超过 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,群聊使用 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 = "离线推送内容";// 透传字段,建议长度不超过 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,群聊填 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);});AndroidiOSuni-appFlutterReact NativeHarmonyOSUnityUnreal Engine微信小程序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,群聊该参数填 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_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,群聊该参数填 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 = '离线推送内容';// 透传字段,建议长度不超过 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', // 小米私信消息模板 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 = "离线推送内容";// 透传字段,建议长度不超过 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,群聊填 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);});

注意:说明:

注意:接口传入值优先级高于控制台默认值,且只对当前消息生效。

赞 (0)
上一篇 4天前
下一篇 4天前