接口说明
请求方式:POST。
服务地址/v3/push/app
接口功能:Push API 是所有推送接口的统称。Push API 有多种推送目标,推送目标见下文。
所有请求参数通过 JSON 封装上传给后台,后台通过请求参数区分不同的推送目标。如有疑问请参见 服务端错误码。
注意
腾讯云移动推送结合业务优化的需求,对全量推送、标签推送和号码包推送进行限频(1条/秒),官网控制台将与 API 同步调整。
如果超过此频率会返回错误码:1008028,请您自行调整推送频率,否则可能会引起推送异常。
必要参数
推送必要参数指一条推送消息必须携带的参数。
参数名 | 类型 | 是否必需 | 描述 |
audience_type | String | 是 | 推送目标: all:全量推送 tag:标签推送 token:单设备推送 token_list:设备列表推送 account:单账号推送 account_list:账号列表推送 package_account_push:号码包推送 package_token_push:token 文件包推送 |
message | Object | 是 | |
message_type | String | 是 | 消息类型: notify:通知 message:透传消息/静默消息 |
environment | String | 是(仅 iOS 平台使用) | 用户指定推送环境,仅限 iOS 平台推送使用: product: 推送生产环境 dev: 推送开发环境 |
upload_id | Integer | 是(仅号码包推送\\ token 文件包推送时使用) | 号码包或 token 包的上传 ID |
audience_type:推送目标
推送目标,表示一条推送可以被推送到哪些设备。
Push API 提供了多种推送目标,例如全量、标签、单设备、设备列表、单账号、账号列表。
推送目标 | 描述 | 必需参数及使用说明 |
all | 全量推送 | 无 |
tag | 标签推送 | tag_rules (推荐使用):标签组合推送,可设置'与'、'或'、'非'组合规则 推送 tag1 和 tag2 的设备 {"tags":["tag1","tag2"],"op":"AND"} 推送 tag1 或 tag2 的设备 {"tags":["tag1","tag2"],"op":"OR"} 标签列表不能超过512个字符 |
token | 单设备推送 | token_list 如果该参数包含多个 token 只会推送第一个 token 格式 eg:[“token1”] token 字符串长度不能超过36 |
token_list | 设备列表群推 | token_list 最多1000个 token 格式 eg:["token1","token2"] token 字符串长度不能超过36 |
account | 单账号推送 | account_list 该参数有多个账号时,仅推送第一个账号 格式 eg:["account1"] |
account_list | 账号列表群推 | account_list 最多1000个 account 格式 eg:["account1","account2"] |
package_account_push | 号码包推送 | 上传号码包推送必填 |
package_token_push | token 文件包推送 | 上传 token 文件包推送必填 |
全量推送:推送给全部设备。
{"audience_type": "all"}
标签推送(tag_rules 方式):广东和湖南,并且是20200408当天活跃过的男性用户。
{"audience_type": "tag","tag_rules": [{"tag_items": [{"tags": ["guangdong","hunan"],"is_not": false,"tags_operator": "OR","items_operator": "OR","tag_type": "xg_auto_province"},{"tags": ["20200408"],"is_not": false,"tags_operator": "OR","items_operator": "AND","tag_type": "xg_auto_active"},{"tags": ["male"],"is_not": false,"tags_operator": "OR","items_operator": "AND","tag_type": "xg_user_define"}],"operator": "OR","is_not": false}]}
单设备推送:推送给 token 为 token1 的设备。
{"audience_type": "token","token_list": ["token1"]}
设备列表推送,推送给 token 为 token1 和 token2 的设备。
{"audience_type": "token_list","token_list": ["token1","token2"]}
单账号推送:推送给账号为 account1 的设备。
{"audience_type": "account","account_list": ["account1"]}
账号列表推送:推送账号为 account1 和 account2 的设备。
{"audience_type": "account_list","account_list": ["account1","account2"]}
message_type:消息类型
针对不同平台,消息类型稍有不同,具体参照下表:
消息类型 | 描述 | 支持平台 | 特性说明 |
notify | 通知栏消息 | Android & iOS & HarmonyOS | 通知栏展示消息 。 |
message | 透传消息/静默消息 | Android(透传消息) iOS(静默消息) HarmonyOS (透传消息) | 通知栏不展示消息。 注意:因厂商限制,Android 和 HarmonyOS 透传消息只通过移动推送自建通道下发,无法通过厂商通道下发 |
message:消息体
消息体,即下发到客户端的消息。
Push API 对 iOS 、Android 和 HarmonyOS 三个平台的消息有不同处理,需要分开来实现对应平台的推送消息,推送的消息体是 JSON 格式。
Android /Harmony普通消息
Android 和 HarmonyOS 平台具体字段如下表:
注意:
安卓和鸿蒙字段部分共用,请开发者注意支持平台相关字段的使用。
字段名 | 类型 | 父项目 | 默认值 | 必需 | 参数描述 | 支持平台 |
title | String | message | 无 | 是 | 消息标题 | 安卓、鸿蒙 |
content | String | message | 无 | 是 | 消息内容 | 安卓、鸿蒙 |
accept_time | Array | message | 无 | 否 | 消息将在哪些时间段允许推送给用户。 单个元素由 "start" 和 "end" 组成的起止时间对组成 "start" 和 "end" 由 hour (小时)和 min(分钟)描述对应时刻,详细参考具体示例。 注意:因厂商限制, 仅对移动推送自建通道有效 | 安卓、鸿蒙 |
thread_id | String | message | 无 | 否 | 通知分组折叠的组别识别名 注意:因厂商限制, 仅对移动推送自建通道有效 | 安卓、鸿蒙 |
thread_sumtext | String | message | 无 | 否 | 通知分组折叠后显示的摘要,thread_id 非空时有效 注意:因厂商限制, 仅对移动推送自建通道有效 | 安卓 |
xg_media_resources | String | message | 无 | 否 | 通知栏大图片 url 地址,仅对移动推送自建通道和小米通道生效; 注意:如需使用小米通道大图通知功能,需先调用小米图片上传接口上传图片文件,获取小米指定的图片地址 pic_url ,再填入移动推送推送对应的参数 xg_media_resources 中。 | 安卓 |
xg_media_audio_resources | String | message | 无 | 否 | 音频富媒体元素地址。 支持 mp3 格式音频,建议大小在5MB以内。 注意:仅移动推送自建通道支持该参数下发,其他通道不下发该参数 | 安卓 |
android | Object | message | 无 | 否 | 安卓、鸿蒙 |
Android和Harmony 结构体说明
字段名 | 类型 | 父项目 | 默认值 | 必需 | 参数描述 | 支持平台 |
n_ch_id | String | android | 无 | 否 | 安卓 | |
n_ch_name | String | android | 无 | 否 | 安卓 | |
n_category | String | android | 无 | 否 | | 安卓 |
n _importance | Integer | android | 4 | 否 | 1: 对应 Android 系统的 IMPORTANCE_MIN 2: 对应 Android 系统的 IMPORTANCE_LOW 3: 对应 Android 系统的 IMPORTANCE_DEFAULT 4: 对应 Android 系统的 IMPORTANCE_HEIGHT 注意:仅在首次创建通知的 Channel 时生效,如本地已有相同的通知渠道此字段不生效。 | 安卓 |
xm_ch_id | String | android | 无 | 是 | 小米渠道 ID(仅小米推送通道生效)。 警告: 下发小米通道时 ChannelId 必填,否则请求小米报错:27001。 | 安卓 |
fcm_ch_id | String | android | 无 | 否 | FCM 渠道 ID(仅 FCM 推送通道生效)。 | 安卓 |
hw_biz_type | Integer | android | 0 | 否 | 是否开启华为快通知: 1:开启 0:关闭 | 安卓 |
urgency | string | android | NORMAL |
否
| 华为/荣耀通道下发的消息紧急程度,取值HIGH、NORMAL(默认)。 | 安卓 |
oppo_top_notification_bar_show | Bool | android | false | 否 | OPPO 置顶功能: true:置顶 false:不置顶 | 安卓 |
oppo_senior_push | Bool | android | false | 否 | OPPO 商业化推送(用于置顶和免折叠) : true:不占个人配额和总配额 false:占用普通总额和个人配额 | 安卓 |
oppo_advertiser_id | String | android | 无 | 否 | OPPO 广告主 ID,OPPO 厂商分配。 | 安卓 |
vivo_marketing | Object | android | 无 | 否 | 安卓 | |
hw_ch_id | String | android | 无 | 否 | 华为渠道 ID(仅 华为推送通道生效) | 安卓 |
hw_category | String | android | 无 | 否 | IM:即时聊天 VOIP:音视频通话 SUBSCRIPTION:订阅 | 安卓 |
hw_importance | Integer | android | 无 | 否 | 华为消息的提醒级别,取值如下: 1:表示通知栏消息预期的提醒方式为静默提醒,消息到达手机后,无铃声震动。 2:表示通知栏消息预期的提醒方式为强提醒,消息到达手机后,以铃声、震动提醒用户。终端设备实际消息提醒方式将根据 hw_category 字段取值或者 智能分类 结果进行调整。 荣耀消息分类,对不同类别消息的展示 ,取值如下: 1:表示消息为资讯营销类,默认展示方式为静默通知,仅在下拉通知栏展示。 2:表示消息为服务通讯类,默认展示方式为锁屏展示+下拉通知栏展示。 | 安卓 |
oppo_ch_id | String | android | 无 | 否 | OPPO 渠道 ID(仅 OPPO 推送通道生效) | 安卓 |
vivo_category | String | android | 无 | 否 | IM:即时聊天 ACCOUNT:账号与资产变动 SUBSCRIPTION:订阅提醒 注意:赋值请按照消息分类规则填写,且必须大写;若传入错误无效的值,否则返回错误码10096。 | 安卓 |
vivo_ch_id | String | android | 0 | 否 | vivo 渠道 ID:“0”代表运营消息,“1”代表系统消息(仅 vivo 推送通道生效)。 说明:该字段即将下线,请6月30号之前申请 vivo_category 参数传值,否则被判为运营消息(推送受限)。 | 安卓 |
builder_id | Integer | android | 0 | 否 | 本地通知样式标识,指定成您在终端预设的样式id, 不传则不指定。 | 安卓 |
badge_type | Integer | android | -1 | 否 | 通知角标: -2:自动增加1,支持华为和鸿蒙设备 -1:不变,支持华为、鸿蒙和 vivo 设备 [0, 100):直接设置,支持华为、vivo 和鸿蒙设备 | 安卓、鸿蒙 |
ring | Integer | android | 1 | 否 | 是否有铃声: 0:没有铃声 1:有铃声 | 安卓 |
ring_raw | String | android | 无 | 否 | 指定 Android 工程里 raw 目录中的铃声文件名,不需要后缀名。 | 安卓 |
vibrate | Integer | android | 1 | 否 | 是否使用震动: 0:没有震动 1:有震动 | 安卓 |
lights | Integer | android | 1 | 否 | 是否使用呼吸灯: 0:不使用呼吸灯 1:使用呼吸灯 | 安卓 |
clearable | Integer | android | 1 | 否 | 通知栏是否可清除: 0: 不可清理 1: 可清理 | 安卓 |
icon_type | Integer | android | 0 | 否 | 指定通知栏缩略图显示的是应用内图标还是网络资源图标 : 0:应用内图标,仅对移动推送自建通道有效 1:网络资源图标,仅移动推送自建通道、FCM、华为、荣耀和鸿蒙通道支持 | 安卓、鸿蒙 |
icon_res | String | android | 无 | 否 | 指定通知栏缩略图的具体图片资源 : 当 icon_type = 0:填写 Android 应用内的图片资源文件名称(不带文件后缀),仅对移动推送自建通道有效 当前 icon_type = 1:填写缩略图 url 地址,缩略图格式要求可参见 富媒体通知文档,仅移动推送自建通道、FCM、华为、荣耀和鸿蒙通道支持 | 安卓、鸿蒙 |
style_id | Integer | android | 1 | 否 | 设置是否覆盖指定编号的通知样式: 0: 不覆盖下发的样式 1: 优先使用在终端设置的样式 | 安卓 |
small_icon | String | android | 无 | 否 | 消息在状态栏显示的图标,若不设置,则显示应用图标 | 安卓 |
icon_color | Integer | android | 0 | 否 | 通知栏小图标染色 仅移动推送自建通道有效 需要使用 RGB 颜色的十进制值,例如 RGB 颜色 #01e240,请填入123456, 0:默认不染色。 | 安卓 |
action | Object | android | 有 | 否 | 设置点击通知栏之后的行为,默认为打开 App,详情参考 action 参数说明 | 安卓 |
custom_content | String | android | 无 | 否 | 说明: 华为官方通知:「2021年9月30日起停用V2协议」。移动推送已将华为推送协议升级到V5,V5协议不支持通过【附加参数】字段携带自定义参数。如果您集成了华为厂商通道,建议您改用 Intent 方式携带自定义参数,否则将导致自定义参数不能成功通过华为推送通道下发。 | 安卓 |
show_type | Integer | android | 2 | 否 | 应用前台时,是否展示通知 。 默认展示,仅对移动推送自建通道、FCM 通道有效 1:不展示 2:展示 说明: 若取值为1且应用在前台,终端用户对该条推送无感知,但有抵达数据上报。 | 安卓 |
harmony_message | Object | android | 无 | 是 | 鸿蒙 |
vivo_marketing 参数说明
字段名 | 类型 | 父项目 | 默认值 | 必需 | 参数描述 | 支持平台 |
creative_id | Int64 | vivo_marketing | 无 | 是 | 安卓 | |
style_type | Int64 | vivo_marketing | 无 | 是 | 标题+内容:id =1,类型纯文本 标题+内容+小图:id=2,类型小图 标题+内容+大图+小图(可选):id=3,类型大图 标题+内容+组图/三图+小图(可选):id=4,类型组图/三图 | 安卓 |
price | String | vivo_marketing | 无 | 是 | 安卓 | |
style | Struct | vivo_marketing | 无 | 否 | 安卓 |
vivo_style 参数说明
字段名 | 类型 | 父项目 | 默认值 | 必需 | 参数描述 | 支持平台 |
small_image_id | Int64 | vivo_style | 无 | 否 | 安卓 | |
large_image_id | Int64 | vivo_style | 无 | 否 | 安卓 | |
buttons | array | vivo_style | 无 | 否 | 最多可填写 3 个按钮,单个按钮长度不超过 12 个字符(6 个汉字或 12 个英文字母) 支持每个按钮单独配置 deeplink 链接,详情请参见vivo付费服务接口文档,其需要联系 vivo 商务开通。非vivo付费服务请忽略。 | 安卓 |
vivo_button 参数说明
字段名 | 类型 | 父项目 | 默认值 | 必需 | 参数描述 | 支持平台 |
name | String | vivo_button | 无 | 是 | 安卓 | |
skip_type | Int | vivo_button | 无 | 是 | 单击跳转类型: 1:打开 App 首页 2:打开链接 4:打开 App 内指定页面 | 安卓 |
skip_content | String | vivo_button | 无 | 是 | 跳转内容,跳转类型为 2 时,跳转内容最大 1000 个字符,跳转类型为 4 时,跳转内容最大 1024 个字符。关于 skipContent 的内容可 以参考【vivo 推送常见问题】,其需要联系vivo 商务开通。 非vivo付费服务请忽略。 | 安卓 |
action 参数说明
字段名 | 类型 | 父项目 | 默认值 | 必需 | 参数描述 | 支持平台 |
action_type | Integer | action | 1 | 否 | 点击动作类型, 1:打开 activity 或 App 本身 2:打开浏览器 3:打开 App 自定义页面(推荐使用,参考 使用 Intent 方式跳转指引) | 安卓 |
activity | String | action | 无 | action_type 为1,且需要打开 activity 时必选 | activity 完整名称,例如 com.x.y.PushActivity | 安卓 |
aty_attr | Object | action | 无 | action_type 为1,且需要打开 activity 时可选 | activity 属性 if:Intent 的 Flag 属性,类型为 Integer pf:PendingIntent 的 Flag 属性,类型为 Integer | 安卓 |
browser | Object | action | 无 | action_type 为2时必选 | 打开浏览器操作, url:网页地址,仅支持 http、https,类型为 String confirm:是否需要用户确认,类型为 Integer 1:需要确认 0:不需要确认 | 安卓 |
intent | String | action | 无 | action_type 为3时必选 | 自定义 scheme,例如 xgscheme://com.tpns.push/notify_detail | 安卓 |
harmony_message 结构体说明
字段名 | 类型 | 父项目 | 默认值 | 必需 | 参数描述 | 支持平台 |
push_type | int | harmony_message | 0 | 是 | 消息类型,取值如下: 0:Alert消息(通知消息、授权订阅消息) 1:卡片刷新消息 2:通知扩展消息 6: 后台消息 7:实况窗更新消息 10: VoIP呼叫消息 注意:目前仅支持0(通知消息),其他值暂时无效,待后续更新。 | 鸿蒙 |
category | string | harmony_message | MARKETING | 否 | IM:即时聊天 VOIP:音频、视频通话 SUBSCRIPTION:订阅 TRAVEL:出行 HEALTH:健康 WORK:工作事项提醒 ACCOUNT:账号动态 EXPRESS:订单&物流 FINANCE:财务 DEVICE_REMINDER:设备提醒 MAIL:邮件 MARKETING:内容推荐、新闻、财经动态、生活资讯、调研、社交动态、产品促销、功能推荐、运营活动(仅对内容进行标识,不会加快消息发送),统称为营销类消息,该营销消息类型无需申请自分类权益,消息携带 category 取值后即生效。 注意: | 鸿蒙 |
style | int | harmony_message | 0 | 是 | 通知消息样式(0-普通,3-多行文本) 为3时,inbox_content字段不能为空 | 鸿蒙 |
inbox_content | string数组 | harmony_message | 无 | 否 | 多行文本样式的内容,最多支持3条内容,如: "inbox_content": ["1.content1","2.content2","3.content3"] | 鸿蒙 |
click_action | JsonObject | harmony_message | 无 | 否 | 鸿蒙 | |
slot_type | int | harmony_message | 无 | 否 | 通知slot 类型
已有如下值
0 - UNKNOWN_TYPE 未知类型
1 - SOCIAL_COMMUNICATION 社交通信
2 - SERVICE_INFORMATION 服务提醒
3 - CONTENT_INFORMATION 内容资讯
4 - LIVE_VIEW 实况窗。(预留能力,暂未支持)
5 - CUSTOMER_SERVICE 客服消息 该类型用于用户与商家之间的客服消息,需由用户主动发起。 注意: 该字段仅在移动推送自建通道生效。 | 鸿蒙 |
custom_content | String | harmony_message | 无 | 否 | 用户自定义的参数(需要序列化为 JSON String) | 鸿蒙 |
click_action参数说明(harmony)
字段名 | 类型 | 父项目 | 默认值 | 必需 | 参数描述 | 支持平台 |
action_type | int | click_action | 0 | 否 | 消息点击后的行为 0:打开应用首页
1:打开自定义页面 | 鸿蒙 |
action | string | click_action | 无 | 否 | 应用内置页面 ability 对应的 action 当 action_type 为1时,字段 uri 和 action 至少填写一个 | 鸿蒙 |
uri | string | click_action | 无 | 否 | 应用内置页面 ability 对应的 uri 当 action_type 为1时,字段 uri 和 action 至少填写一个 | 鸿蒙 |
安卓和鸿蒙完整的消息示例如下:
{"title": "xxx","content": "xxxxxxxxx","xg_media_resources": "xxx" , //此处填富媒体元素地址,例如https://www.xx.com/img/bd_logo1.png?qua=high"xg_media_audio_resources":"xxx", //此处填音频富媒体元素地址,例如http://sc1.111ttt.cn/2018/1/03/13/396131227447.mp3"thread_id":"活动_id","thread_sumtext":"运营活动","accept_time": [{"start": {//时间段起始时间,"hour": "13",//起始时间 小时值, 取值 [0:24)"min": "00"// 起始时间 分钟值, 取值[0:60)},"end": {//时间段结束时间"hour": "14",//结束时间 小时值, 取值 [0:24)"min": "00" //结束时间 分钟值,取值[0:60)}},{"start": {"hour": "00","min": "00"},"end": {"hour": "09","min": "00"}}],"android": {"n_ch_id": "default_message","n_ch_name": "默认通知","builder_id": 0,"ring": 1,"ring_raw": "ring","badge_type":-1,"vibrate": 1,"lights": 1,"clearable": 1,"icon_type": 0,"icon_res": "xg","style_id": 1,"small_icon": "xg","custom_content":"{\\"key\\":\\"value\\"}" //Android下的自定义参数"action": {"action_type": 1,// 动作类型,1,打开activity或app本身;2,打开浏览器;3,打开Intent"activity": "com.x.y.PushActivity","aty_attr": {// activity属性,只针对action_type=1的情况"if": 0, // Intent的Flag属性"pf": 0 // PendingIntent的Flag属性},"browser": {"url": "https://cloud.tencent.com ", // 仅支持http、https"confirm": 1 // 是否需要用户确认},"intent": "xgscheme://com.tpns.push/notify_detail" //SDK版本需要大于等于1.0.9,然后在客户端的intent配置data标签,并设置scheme属性},"harmony_message": {"push_type": 0,"category": "MARKETING","slot_type": 1,"style": 3,"inbox_content": ["床前明月光","疑是地上霜","第三行"],"click_action": {"action_type": 1,"uri": "tpns://com.tpns.push/notify_detail"},"custom_content":"{\\"key\\":\\"value\\"}" //Harmony下的自定义参数}}}
iOS 通知消息
iOS 平台具体字段如下表:
字段名 | 类型 | 父项目 | 默认值 | 必需 | 参数描述 |
title | String | message | 无 | 是 | 消息标题,此字段会覆盖 alert 下的 title 中的内容。 |
content | String | message | 无 | 是 | 消息内容,此字段会覆盖 alert 下的 body 中的内容。 |
thread_id | String | message | 无 | 否 | 通知分组折叠的组别识别名 |
ios | Object | message | 无 | 是 | |
show_type | Integer | message | 2 | 否 | 应用前台时,是否展示通知 。 1:不展示 2:展示 说明:若取值为1且应用在前台,终端用户对该条推送无感知,但有抵达数据上报。 |
xg_media_resources | String | message | 无 | 否 | 图片、音视频富媒体元素 url 地址,详情请参见 富媒体通知 |
iOS 字段说明
aps 参数说明
字段名 | 类型 | 父项目 | 默认值 | 必需 | 参数描述 |
alert | Object | aps | 无 | 是 | 包含标题和消息内容 |
badge_type | Integer | aps | 无 | 否 | 用户设置角标数字: -1:角标数字不变 -2:角标数字自动加1 >=0:设置自定义角标数字 |
category | String | aps | 无 | 否 | 下拉消息时显示的操作标识 |
mutable-content | Integer | aps | 1 | 否 | 通知拓展参数。 推送的时候携带 "mutable-content":1,说明是支持 iOS 10 的 Service Extension 开启后,推送详情中会有抵达数据上报,使用该功能前请按照 通知服务扩展的使用说明 实现 Service Extension 接口,如果不携带此字段则没有抵达数据上报 注意: 如果消息有富媒体信息(xg_media_resources字段)此字段强制取值为1 |
sound | String | aps | 无 | 否 | sound 字段使用情况如下: 播放系统默认提示音,"sound":"default" 播放本地自定义铃声,"sound":"chime.aiff" 静音效果,"sound":"" 或者是去除 sound 字段。 自定义铃声说明:格式必须是 Linear PCM、MA4(IMA/ADPCM)、alaw,μLaw 的一种,将声频文件放到项目 bundle 目录中,且时长要求30s以下,否则就是系统默认的铃声。 |
interruption-level | String | aps | active | 否 | passive:被动通知,即并不需要及时关注的通知。 active:主动通知,默认的通知。 time-sensitive:时效性通知,需要人们立刻注意的通知。 critical:重要通知,需要立刻关注的通知。 |
relevance-score | double | aps | 无 | 否 | 仅对 iOS 15 以后的设备生效,取值范围0~1之间,开启专注模式后此字段生效,系统会根据字段分数从高到低对通知进行排序,分数最高的会展示在通知摘要中。 |
完整的消息示例如下:
{"title": "xxx","content": "xxxxxxxxx","thread_id":"活动_id","xg_media_resources":"https://www.xx.com/img/bd_logo1.png","show_type":1,"ios":{"aps": {"alert": {"subtitle": "my subtitle"},"badge_type": 5,"category": "INVITE_CATEGORY","sound":"default","interruption-level":"time-sensitive","relevance-score": 0.2,"mutable-content":1},"custom_content":"{\\"key\\":\\"value\\"}"}}
Android/Harmony 透传消息
透传消息,Android/Harmony平台特有,即不显示在手机通知栏中的消息,可以用来实现让用户无感知的向 App 下发带有控制性质的消息。
注意
因厂商限制,Android/Harmony 透传消息只通过移动推送自建通道下发,无法通过厂商通道下发。
Android和Harmony 平台具体字段如下表:
字段名 | 类型 | 父项目 | 默认值 | 是否必需 | 参数描述 | 支持平台 |
title | String | message | 无 | 是 | 命令描述 | 安卓和鸿蒙 |
content | String | message | 无 | 是 | 命令内容 | 安卓和鸿蒙 |
android | Object | message | 无 | 否 | 安卓消息结构体 | 安卓和鸿蒙 |
accept_time | Array | message | 无 | 否 | 消息将在哪些时间段允许推送给用户。 单个元素由 "start" 和 "end" 组成的起止时间对组成。 "start" 和 "end" 由 hour (小时)和 min(分钟)描述对应时刻,详细参考具体示例。 注意:因厂商限制, 仅对移动推送自建通道有效。 | 安卓和鸿蒙 |
custom_content | String | android | 无 | 否 | 需要序列化为 json string | 安卓和鸿蒙 |
具体完整示例:
{"title": "this is title","content": "this is content","android": {"custom_content":"{\\"key\\":\\"value\\"}"},"accept_time": [{"start": {"hour": "13","min": "00"},"end": {"hour": "14","min": "00"}},{"start": {"hour": "00","min": "00"},"end": {"hour": "09","min": "00"}}]}
iOS 静默消息
静默消息,iOS 平台特有,类似 Android 中的透传消息,消息不展示,当静默消息到达终端时,iOS 会在后台唤醒 App 一段时间(小于30s),让 App 来处理消息逻辑。
具体字段如下表:
字段名 | 类型 | 父项目 | 默认值 | 是否必要 | 参数描述 |
ios | Object | message | 无 | 是 | ios 消息结构体 |
aps | Object | ios | 无 | 是 | 苹果推送服务(APNs)特有的,其中最重要的键值对如下: content-available:标识消息类型(必须为1),类型为 Integer 不能包含 alert、sound、badge_type 字段,详细介绍请参见 Payload |
custom_content | String | ios | 无 | 否 | 需要序列化为 json string |
具体完整示例:
{"ios":{"aps": {"content-available": 1},"custom_content":"{\\"key\\":\\"value\\"}"}}
iOS LiveActivity
实时活动,用户可以通过 ActivityKit 开发锁屏状态下的实时活动界面或开发基于灵动岛的动画效果,可以通过 APNs 发送远程通知来更新或结束实时活动。
具体字段如下表:
字段名 | 类型 | 父项目 | 默认值 | 是否必要 | 参数描述 |
activity | String | 无 | 无 | 是 | 终端 ActivityKit 初始化活动 ID |
event | String | aps | 无 | 是 | 事件类型,更新实时活动取值 update ,结束实时活动取值 end |
content-state | Object | aps | 无 | 是 | 实时活动内容更新,KV 格式,用户配合终端所需内容自行定义及解析 |
dismissal-date | Integer | aps | 4小时 | 否 | 当结束实时活动, event 为 end 时生效,不填则默认4小时后消失,若取值为过去时间则立马消失,若取值4小时以内的时间则按指定时间消失 |
说明:
当使用实时活动时,message_type 取 notify 值。
具体完整示例:
{"audience_type": "activity","activity": "6F21C4FC-5FB0-4310-AA13-C7B12FD6FAEF","environment": "dev","message_type": "notify","message": {"ios": {"aps": {"event": "update","dismissal-date":1684310548,"content-state": {"step": "inProgress","describe": "Delivery Update756"},"sound":"mysound.wav","alert": {}},"custom_content": "{\\"key\\":\\"value\\"}"}}}
可选参数
Push API 可选参数是除了
audience_type
、message_type
、message
以外,可选的高级参数。参数名 | 类型 | 父项目 | 必需 | 默认值 | 描述 |
expire_time | Integer | 无 | 否 | 86400(24小时) | 消息离线存储时间(单位为秒),最长72小时 若 expire_time = 0,则表示实时消息 若 expire_time 大于0,且小于800s,则系统会重置为800s 若expire_time >= 800s,按实际设置时间存储,最长72小时 设置的最大值不得超过259200,否则会导致推送失败 如需调整离线消息时间,请联系 在线客服 申请 |
channel_expires | Array[{"chanel":string,"expire_time":int}] | 无 | 否 | 无 | 在推送接口中填写 channel_expires 字段后, 在推送流程中,会区分此类型消息和普通消息,单独使用通道的特殊离线消息时长,其他通道则使用默认值 expire_time 过期时间,消息离线存储时间(单位为秒),最长72小时 若 expire_time = 0,则表示实时消息 若 expire_time 大于0,且小于800s,则系统会重置为800s 若 expire_time >= 800s,按实际设置时间存储,最长72小时 设置的最大值不得超过259200,否则会导致推送失败 如需调整离线消息时间,请联系 在线客服 申请 |
send_time | String | 无 | 否 | 当前系统时间 | 定时推送任务,指定推送时间,可选择未来90天内的时间: 格式为 yyyy-MM-DD HH:MM:SS 若小于服务器当前时间,则会立即推送 仅全量推送、号码包推送和标签推送支持此字段 |
multi_pkg | Boolean | 无 | 否 | false | 多包名推送:当 App 存在多个渠道包(例如应用宝、豌豆荚等),并期望推送时所有渠道的 App 都能收到消息,可将该值设置为 true。 |
loop_param | Object | 无 | 否 | 0 | |
plan_id | String | 无 | 否 | 无 | 推送计划 ID,推送计划创建及使用方式可 参考文档 |
tag_rules | Array | 无 | 仅标签推送必需 | 无 | 标签组合推送,可设置'与'、'或'、'非'组合规则 |
account_list | Array | 无 | 单账号推送、账号列表推送时必需 | 无 | 若单账号推送: 要求 audience_type = account 参数格式:[ "account1" ] 若账号列表推送: 参数格式: ["account1","account2"] 最多1000 个 account |
account_push_type | Integer | 无 | 账号推送时可选 | 0 | 0:往账号的最新的 device 上推送信息 1:往账号关联的所有 device 设备上推送信息 |
account_type | Integer | 无 | 否 | 0 | 账号类型,需要与推送的账号所属类型一致,取值可参考 账号类型取值表 |
token_list | Array | 无 | 单设备推送、设备列表推送时必需 | 无 | 若单设备推送: 要求 audience_type=token 参数格式:[ "token1" ] 若设备列表推送: 参数格式:[ "token1","token2" ] 最多1000个 token |
ignore_invalid_token | Integer | 无 | 否 | 0 | 0:代表如果有无效的token则这个接口调用失败 1:代表忽略无效的token继续进行下发 注意:仅对 token 列表推送和单 token 推送有效 |
push_speed | Integer | 无 | 否 | 无 | 推送限速设置每秒 X 条,X 取值参数范围1000 - 50000 仅全量推送、号码包推送和标签推送有效 |
collapse_id | Integer | 无 | 否 | 系统默认分配一个 collapse_id | 消息覆盖参数,在前一条推送任务已经调度下发后,如果第二条推送任务携带相同的 collapse_id 则会停止前一条推送中尚未下发的移动推送自建通道数据,同时会覆盖展示第一条推送任务的消息。 已完成任务的 collapse_id 可以通过 单个任务推送信息查询接口 获取。 目前仅支持全推、标签推送、号码包推送。 |
channel_rules | Array | 无 | 否 | 无 | 推送通道选择策略。 可自定义该条推送允许通过哪些通道下发,默认允许通过所有通道下发,详细推送策略参考 通道策略 channel_rules 数组单元素数据结构见下 channel_rules 参数说明 |
tpns_online_push_type | Integer | 无 | 否 | 0 | 在线设备是否通过移动推送自建通道下发: 0:默认在线走移动推送自建通道下发 1:在线不优先走移动推送自建通道下发 |
force_collapse | Boolean | 无 | 否 | false | 对于不支持消息覆盖的 OPPO 、vivo 通道的设备,是否进行消息下发。 false:不下发消息 true:下发消息 |
说明
对于 collapse_id,有以下使用条件:
暂不支持用户自定义此参数,需要移动推送生成的 collapse_id。
目前仅支持移动推送自建通道、APNS 通道、小米通道、魅族通道以及华为系统版本 EMUI10 及以上的设备。
对于华为通道,覆盖消息时携带自定义参数需要使用 intent 方式,如使用 custom_content 方式携带自定义参数,接口层会进行拦截。
目前 OPPO 通道 vivo 通道不支持覆盖消息。当新创建覆盖消息时可通过 force_collapse 字段设置为 false 来关闭 vivo、OPPO 通道的下发。
tag_rules 参数说明
字段 | 类型 | 父项目 | 必填 | 描述 |
tag_items | Array | tag_rules | 是 | 标签规则,参见 tag_items 说明 |
operator | String | tag_rules | 是 | tag_rules 数组内各元素的运算符,第一个 tag_rules 元素的 operator 为无效数据,第二个 tag_rules 元素的 operator 作为第一个和第二个 tag_rules 元素之间的运算符。 OR: 或运算 AND:且运算 |
is_not | Boolean | tag_rules | 是 | 是否对 tag_items 数组的运算结果进行非运算。 true:进行非运算 false:不进行非运算 |
tag_items 说明
字段 | 类型 | 父项目 | 必填 | 描述 |
tags | Array | tag_items | 是 | 具体标签值,类型:string,如 tag1,guangdong 等。 |
is_not | Boolean | tag_items | 是 | 是否对 tag 数组的运算结果进行非运算。 true:非运算 false:不进行非运算 |
tags_operator | String | tag_items | 是 | tags 内标签对应的运算符。 OR:或运算 AND:且运算 |
items_operator | String | tag_items | 是 | tag_items 数组内各元素的运算符,第一个 tag_items 元素的 items_operator 为无效数据,第二个 tag_items 元素的 items_operator 作为第一个和第二个 tag_items 元素之间的运算符。 OR :或运算 AND :且运算 注意:不同规则之间运算符逻辑优先级「AND」>「OR」 |
tag_type | String | tag_items | 是 | 参见 tag_type 取值表 |
tag_type 取值表
标签名称 | tag_type 取值 | 标签名举例 |
自定义标签 | xg_user_define | tag1,tag2 等 |
App版本 | xg_auto_version | 1.1.0,1.2.0.1等 |
设备省份信息 | xg_auto_province | guangdong,shanghai 等 |
活跃信息 | xg_auto_active | 20200131,20200201等 |
XG SDK版本 | xg_auto_sdkversion | 1.1.5.2,1.1.5.3等 |
系统语言 | xg_auto_systemlanguage | zh,en 等 |
手机品牌 | xg_auto_devicebrand | Xiaomi,vivo 等 |
手机机型 | xg_auto_deviceversion | MI 9 SE,vivo X9Plus 等 |
国家 | xg_auto_country | CN,SG 等 |
说明
channel_rules 参数说明
字段名 | 类型 | 父项目 | 是否必填 | 参数说明 |
channel | String | channel_rules | 是 | 下发推送通道。 xg:自建通道 hw:华为通道 xm:小米通道 mz:魅族通道 vivo:vivo 通道 oppo:OPPO 通道 apns:APNs 通道 honor:荣耀通道 fcm:FCM通道 harmony:鸿蒙通道 |
disable | Boolean | channel_rules | 是 | 是否关闭 channel 中对应的通道, 默认打开通道。 true:关闭 false:打开 |
loop_param 参数说明
字段名 | 类型 | 父项目 | 是否必填 | 注释 |
startDate | String | loop_param | 是 | 循环区间开始日期,可选择未来90天内的时间。格式 YYYY-MM-DD,例如2019-07-01 |
endDate | String | loop_param | 是 | 循环区间截止日期,可选择未来90天内的时间。格式 YYYY-MM-DD,例如2019-07-07 |
loopType | Integer | loop_param | 是 | 循环类型: 天: 1 周: 2 月: 3 |
loopDayIndexs | Array | loop_param | 是 | 按天循环:填写[0],表示每天的任务,按周循环:填周几[0-6],如[0, 1, 2]表示每周的星期天,周一,周二进行推送,按月循环:填写日期,如[1,10,20],每个月1,10,20号 |
dayTimes | Array | loop_param | 是 | 具体推送时间,格式 HH:MM:SS,例如["19:00:00", "20:00:00"],表示每天的19点,20点进行推送 |
应答参数
字段名 | 类型 | 是否必须 | 注释 |
seq | Integer | 是 | 与请求包一致(如果请求包无该字段,则该字段返回为0) |
push_id | String | 是 | 推送 ID 注意:如果您是循环推送类型,则会返回多个 pushid 放在一个数组类型里 |
collapse_id | Integer | 是 | 消息覆盖ID |
invalid_targe_list | Array | 是 | 仅对 token 列表推送和单 token 推送 且 ignore_invalid_token 值为1时返回,该字段会存储被过滤的无效 token ,有效 token 会正常下发 |
ret_code | Integer | 是 | 错误码,详细参照错误码对照表 |
environment | String | 是 | 用户指定推送环境,仅支持 iOS product: 生产环境 dev: 开发环境 |
err_msg | String | 是 | 请求出错时的错误信息 |
result | String | 是 | 请求正确时, 若有额外数据要返回,则结果封装在该字段的 json 中 若无额外数据,则此字段为空 |
err_msg_zh | String | 是 | 中文错误信息 |
示例说明
Android/Harmony 账号推送请求消息
{"audience_type": "account","account_list": ["account1"],"multi_pkg":true,"push_speed":50000,"channel_rules": [{"channel": "mz","disable": true},{"channel": "xm","disable": false},{"channel": "harmony","disable": true}],"message_type": "notify","message": {"title": "测试标题","content": "测试内容","xg_media_resources": "xxx1" , //此处填富媒体元素地址,例如https://www.xx.com/img/bd_logo1.png?qua=high"xg_media_audio_resources":"xxx", //此处填音频富媒体元素地址,例如http://sc1.111ttt.cn/2018/1/03/13/396131227447.mp3"accept_time": [{"start": {//时间段起始时间,"hour": "13",//起始时间 小时值, 取值 [0:24)"min": "00"// 起始时间 分钟值, 取值[0:60)},"end": {//时间段结束时间"hour": "14",//结束时间 小时值, 取值 [0:24)"min": "00" //结束时间 分钟值,取值[0:60)}},{"start": {"hour": "00","min": "00"},"end": {"hour": "09","min": "00"}}],"android": {"n_ch_id": "default_message","n_ch_name": "默认通知","builder_id": 0,"ring": 1,"ring_raw": "ring","badge_type":-1,"vibrate": 1,"lights": 1,"clearable": 1,"icon_type": 0,"icon_res": "xg","style_id": 1,"small_icon": "xg","action": {"action_type": 1,// 动作类型,1,打开 activity 或 app 本身;2,打开浏览器;3,打开 Intent"activity": "xxx","aty_attr": {// activity属性,只针对action_type=1的情况"if": 0, // Intent的Flag属性"pf": 0 // PendingIntent的Flag属性},"browser": {"url": "xxxx ", // 仅支持http、https"confirm": 1 // 是否需要用户确认},"intent": "xxx" //SDK版本需要大于等于1.0.9,然后在客户端的intent配置data标签,并设置scheme属性},"harmony_message": {"push_type": 0,"category": "MARKETING","slot_type": 1,"style": 0,"click_action": {"action_type": 1,"uri": "tpns://com.tpns.push/notify_detail"}}"custom_content":"{\\"key\\":\\"value\\"}"}}}
账号推送应答消息
{"seq": 0,"push_id": "3895624686","collapse_id": 0,"environment": "product","err_msg": "NO_ERROR","result": "{}","ret_code": 0,"invalid_targe_list": [],"err_msg_zh": ""}
iOS 单设备推送请求消息
{"audience_type": "token","environment":"dev","token_list": [ "05da87c0ae********fa9e08d884aada5bb2"],"message_type":"notify","message":{"title": "推送标题","content": "推送内容","ios":{"aps": {"alert": {"subtitle": "推送副标题"},"badge_type": -2,"sound":"Tassel.wav","category": "INVITE_CATEGORY"},"custom_content":"{\\"key\\":\\"value\\"}"}}}
单设备推送应答消息
{"seq": 0,"push_id": "427184209","collapse_id": 55067797,"ret_code": 0,"environment": "dev","err_msg": "","result": "{}","invalid_targe_list": [],"err_msg_zh": ""}
标签推送场景(tag_rules 方式)
场景一:广东和湖南,并且是20200408当天活跃过的男性用户
表达式:(xg_auto_province.guangdong 或 xg_auto_province.hunan)与 xg_auto_active.20200408 与 xg_user_define.male
{"audience_type": "tag","tag_rules": [{"tag_items": [{"tags": ["guangdong","hunan"],"is_not": false, //是否对tags内标签计算的结果进行非运算,true-进行非运算,false-不进行非运算"tags_operator": "OR", //tags内标签对应的运算符"items_operator": "OR", //tag_items内各元素的运算符,第一个元素的items_operator为无效数据,第二个元素的items_operator作为第一个和第二个元素之前的运算符,以此类推"tag_type": "xg_auto_province" //tags内标签对应的标签类型},{"tags": ["20200408"],"is_not": false,"tags_operator": "OR","items_operator": "AND","tag_type": "xg_auto_active"},{"tags": ["male"],"is_not": false,"tags_operator": "OR","items_operator": "AND","tag_type": "xg_user_define"}],"operator": "OR","is_not": false}]}
场景二:近3天活跃,并且 App 版本不为1.0.2的华为用户
表达式:(xg_auto_active.20200406 或 xg_auto_active.20200407 或 xg_auto_active.20200408)与 (非 xg_auto_version.1.0.2) 与 xg_auto_devicebrand.huawei
{"audience_type": "tag","tag_rules": [{"tag_items": [{"tags": ["20200406","20200407","20200408"],"is_not": false, //是否对tags内标签计算的结果进行非运算,true-进行非运算,false-不进行非运算"tags_operator": "OR", //tags内标签对应的运算符"items_operator": "OR", //tag_items内各元素的运算符,第一个元素的items_operator为无效数据,第二个元素的items_operator作为第一个和第二个元素之前的运算符,以此类推"tag_type": "xg_auto_active" //tags内标签对应的标签类型},{"tags": ["1.0.2"],"is_not": true,"tags_operator": "OR","items_operator": "AND","tag_type": "xg_auto_verison"},{"tags": ["huawei"],"is_not": false,"tags_operator": "OR","items_operator": "AND","tag_type": "xg_auto_devicebrand"}],"operator": "OR","is_not": false}]}