合作咨询
我们的专家服务团队将竭诚为您提供专业的合作咨询服务
此版本文档已归档不再维护,推荐您使用最新版本。
承载协议 | HTTPS POST |
接口方向 | 应用服务器-> PUSH服务器 |
接口URL | https://push-api.cloud.huawei.com/v1/[appid]/messages:send |
华为推送提供了两种消息格式:透传消息和通知栏消息。
透传消息:手机收到推送消息后不直接展示,而是将通知消息传递给最终的应用,后续行为由应用决定。
通知栏消息:手机收到推送消息后由EMUI系统直接展示,开发者可以自定义点击消息的行为,包括:拉起App首页、打开特定URL、打开自定义富媒体消息、打开自定义App页面。
此外,华为推送支持推送消息的如下功能:
功能 | 功能描述 | 样例报文 |
支持多种发送形式 | 支持基于Token的单发; 支持基于Token的群发; 支持基于Topic的发送; 支持基于Condition的发送; | 基于Token的单发、群发: { "validate_only": false, "message": { … "token": ["AAWWHI94sgUR2RU5_P1ZptUiwLq7W8XWJO2LxaAPuXw4_HOJFXnBlN-q5_3bwlxVW_SHeDPx_s5bWW-9DjtWZsvcm9CwXe1FHJg0u-D2pcQPcb3sTxDTJeiwEb9WBPl_9w"] } } 基于Topic的发送: { "validate_only": false, "message": { … "topic": "your specific topic" } } 基于Condition的发送: { "validate_only": false, "message": { … "condition": "'your specific topic' in topic" } } |
支持消息覆盖 | 当下发到离线用户多条消息后,华为推送系统会按照设置的TTL将消息进行缓存,待用户上线后会将缓存下发给用户。默认情况下系统最多给用户发送10条缓存消息,如果开发者想控制缓存消息的行为可以使用本功能。 设置collapse_key为-1表示对于本应用的离线消息待用户上线后全部发送给用户; 设置collapse_key为0表示对于本应用的离线消息待用户上线后按照华为推送系统默认策略发送给用户(一般是最新的一条); 设置collapse_key为1~100是对消息进行分组,例如如果开发者发送了10条消息,其中前5条的collapse_key为1,后5条的collapse_key为2,那么待用户上线后collapse_key为1和2的分别下发最新的一条消息给最终用户。 | { "validate_only": false, "message": { "notification": { "title":"title", "body":"body" }, "android": { "collapse_key": -1, "notification": { "click_action": { "type":2, "url":"http://url.com" } } }, … } } |
支持设置消息的TTL | TTL目前的单位为秒,如果用户设置TTL为0,那么推送系统就不会缓存消息,如果未设置TTL默认会存储消息1天,如果用户设置了其他的数据,那么系统对离线消息存储用户指定的时间,最大15天。 | { "validate_only": false, "message": { … … "android": { "ttl": "1000s", }, … … } } |
支持小程序推送 | 支持小程序的推送。小程序的注册和一般Android应用一样,设置"fast_app_target": 1—>小程序开发引擎, 2—>小程序生产引擎 | { "validate_only": false, "message": { … … "android": { "fast_app_target": 2, }, … … } } |
支持消息的回执 | 开发者开通回执能力后即可接收到消息发送的状态。开发者发送消息时设置bi_tag字段,在收到的消息中华为推送系统会将每个消息的bi_tag回送给开发者服务器,用于进行消息的匹配和分类。 | { "validate_only": false, "message": { … … "android": { "bi_tag": "你需要设置的信息", }, … … } } |
更多功能请参考下面参数部分的详细说明。
开发者调用Push服务器完成消息下发功能。
消息体最大不能超过4096Bytes。按Token发送时,最大Token数不能超过1000。
服务器版本 | 修改日期 | 修改说明 |
WiseCloudPushService 1.5.0.102 | 2019/08/17 | 第一次发布。 |
HTTP头定义 | 取值描述 | 样例 |
Authorization | Bearer后面拼接空格,再拼接获取的access_token。access_token获取请参考:开放平台鉴权-客户端密码模式 | Bearer CkgFMEC8Psgd28LYoGd1hGl0bQWJta2r_K_N8Z5LaUqaSM9amBRpBNfKhgskLICZbm679wUNu9SZB6qOuJmsAUJgiQ7Z2mszw |
URL参数 | 取值描述 | 样例 |
appid | 开发者在AppGallery Connect平台上申请的应用appid | https://push-api.cloud.huawei.com/v1/12345678/xxx:yyy |
HTTP body参数:
{ "validate_only”: boolean "message”: { object(Message) } } |
参数值 | 取值说明 | 必选(M)/可选(O) | 功能 |
validate_only | boolean类型 | O | true: 只是验证消息下发格式和权限,不会下发; false: 消息验证通过后会实际下发到用户; 如果不填,默认行为就是false的行为。 |
message | JSON object | M | 参考下面Message的定义 |
"Message": { "data": string, "notification": { object(Notification) }, "android": { object(AndroidConfig) }, "token": [string], "topic": string, "condition": string } |
参数值 | 取值说明 | 必选(M)/可选(O) | 功能 |
data | string类型 | O | 自定义消息负载。 消息体中没有message.notification和message.android.notification,消息类型为透传消息。 |
notification | JSON object | O | 通知栏消息内容, 具体字段请参考Notification结构体的定义。 |
android | JSON Object | O (如果是通知栏消息,本字段必填) | 参考AndroidConfig中的定义,本结构体定义了Android平台推送的消息体定义。 |
token | JSON Array类型 | M | 需要发送的Push Token列表 |
topic | String类型 | M | 需要发送的topic |
condition | String类型 | M | 需要发送的主题组合表达式。 支持主题组合条件发送,即指定目标主题的布尔表达式。 Condtion的语法和限制: (1) 支持布尔运算 '&&' : 表示逻辑与 '||' : 表示逻辑或 '! ' : 表示逻辑非 '()' : 优先级控制 'in' :关键词 (2) 使用限制 最多可以在条件表达式中包括五个主题 (3) 使用案例 "'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)" 上述表达式将消息发送至已订阅 TopicA 以及 TopicB 或 TopicC 的设备,对于只订阅某个单一主题的用户将不会接收到消息。同样地,未订阅 TopicA 的用户也不会接收到消息。 |
注:token、topic和condition三选一,只能填1个。
{ "title": string, "body": string } |
参数值 | 取值说明 | 必选(M)/可选(O) | 功能 |
title | String类型 | O (发送通知栏消息时本字段与 AndroidNotification结构体中的title两者必须设置一个) | 通知栏消息的标题 |
body | String类型 | O (发送通知栏消息时本字段与 AndroidNotification结构体中的body两者必须设置一个) | 通知栏消息的内容 |
{ "collapse_key": integer, "ttl": string, "bi_tag": string, "fast_app_target": Integer, "notification": { object(AndroidNotification) } } |
参数值 | 取值说明 | 必选(M)/可选(O) | 功能 |
collapse_key | Integer类型,离线消息的覆盖功能 | M | 当下发到离线用户多条消息后,华为推送系统会按照设置的TTL将消息进程缓存,待用户上线后会将缓存下发给用户。默认情况下系统最多给用户发送10条缓存消息,如果开发者想控制缓存消息的行为可以使用本功能。 设置collapse_key为-1表示对于本应用的离线消息待用户上线后全部发送给用户; 设置collapse_key为0表示对于本应用的离线消息待用户上线后按照华为推送系统默认策略发送给用户(一般是最新的一条); 设置collapse_key为1~100是对消息进行分组,例如如果开发者发送了10条消息,其中前5条的collapse_key为1,后5条的collapse_key为2,那么待用户上线后collapse_key为1和2的分别下发最新的一条消息给最终用户。 |
ttl | String类型,设置离线消息的存储时间。 | M | TTL目前的单位为秒,如果用户设置TTL为0,那么推送系统就不会缓存消息,如果未设置TTL默认会存储消息1天,如果用户设置了其他的数据,那么系统对离线消息存储用户指定的时间,最大15天。 |
bi_tag | String类型,用于回执能力。 | M | 开发者开通回执能力后即可接收到消息发送的状态。开发者发送消息时设置bi_tag字段,再收到的消息总华为推送系统会将每个消息的bi_tag会送给开发者服务器,用于进行消息的匹配和分类。 |
fast_app_target | Integer类型,小程序推送使用。 | O | 支持小程序的推送。小程序的注册和一般Android应用一样,设置"fast_app_target": 1—>小程序开发引擎, 2—>小程序生产引擎 |
notification | 参考AndroidNotification的定义。 | M | 参考AndroidNotification的定义。 |
{ "title": string, "body": string, "icon": string, "color": string, "sound": string, "tag": string, "click_action": object(ClickAction), "body_loc_key": string, "body_loc_args": [string], "title_loc_key": string, "title_loc_args": [String ], "channel_id": string, "notify_summary": string, "image": string, "style": Integer, "big_title": string, "big_body": string, "auto_clear": Integer, "notify_id": Integer, "group": string, "badge": object(BadgeNotification) } |
参数值 | 取值说明 | 必选(M)/可选(O) | 功能 | |
title | String类型 | M | 如果发送的是通知栏消息,那么本字段和notification结构体中的title必须设置一个,且本字段优先级高,如果同时设置发送到端侧的就是本字段定义的内容。 | |
body | String类型 | M | 如果发送的是通知栏消息,那么本字段和notification结构体中的body必须设置一个,且本字段优先级高,如果同时设置发送到端侧的就是本字段定义的内容。 | |
icon | String类型 | O | 自定义通知栏图标,如果没有设置默认使用的是应用桌面图标。 例:"/raw/ic_launcher", 对应本地的/res/raw/ ic_launcher.png | |
color | String类型 | O | 通知栏消息图标的颜色。格式为#rrggbb. | |
sound | String类型 | O | 用户收到通知栏消息后的声音,所有声音文件都存储在/res/raw目录下。 例:"/raw/shake", 对应本地的/res/raw/shake.mp3 | |
tag | String类型, | O | 用于端侧消息覆盖功能,开发者对于发送消息如果其tag一样,那么在通知栏显示最终发送的那条消息 | |
click_action | JSON Object | O(如果是通知栏消息必选) | 通知栏消息的点击行为,详见请参考ClickAction的定义。 | |
body_loc_key | String类型 | O | 应用本地化资源对应的key | |
body_loc_args | JSON Array | O | 应用本地化资源的可选参数 | |
title_loc_key | String类型 | O | 应用本地化资源对应的key | |
title_loc_args | JSON Array | O | 应用本地化资源的可选参数 | |
channel_id | String类型 | O | Android O版本中提供的通知消息渠道号。 | |
notify_summary | String类型 | O | 通知栏消息的摘要信息 | |
image | String类型 | O | 用户自定义的图标,是一个公网能访问的图片URL. 必须以HTTPS开头的地址。 | |
style | Integer类型 | M | 0:默认样式 1:大文本样式 | |
big_title | String类型 | O (style为1时必选) | 大文本样式的标题 | |
big_body | String类型 | O (style为1时必选) | 大文本样式的内容 | |
auto_clear | Integer类型 | O | 在通知栏上显示的时间,单位毫秒。例如设置为10000,那么通知栏上在10秒后就会自动清除。 | |
notify_id | Integer类型 | O | 和Tag功能类似,也是用于通知栏展示时的覆盖,对于相同数字的消息只展示最新的条。 | |
group | String类型 | O | 消息分组,对于发送一批例如5条消息,如果group设置一样,就会被分组到一个组。 | |
badge | JSON Object | O | 角标消息,具体请参考BadgeNotification | |
{ "type": Integer, "intent": String, "url": String, "rich_resource": String } |
参数值 | 取值说明 | 必选(M)/可选(O) | 功能 |
type | Integer类型 | M | 设置点击行为的类型: 1标识点击行为用户自定义; 2标识打开特定URL; 3标识打开本业务的APP; 4标识打开富媒体信息; |
intent | String类型 | O (当type为1时必选) | 自定义页面中intent的实现请参考:打开自定义App页面 |
url | String类型 | O (当type为2时必选) | 设置打开特定URL,本字段填写需要打开的URL,URL必选以HTTPS协议提供服务。必须以HTTPS开头的地址。 |
rich_resource | String类型 | O (当type为4时必选) | 设置打开富媒体消息时,本字段填写需要打开的富媒体资源的URL,URL必选以HTTPS协议提供服务。所谓富媒体是指一个自包含的HTML资源包,以zip格式压缩。必须以HTTPS开头的地址。 |
{ "add_num": Integer, "class": String } |
参数值 | 取值说明 | 必选(M)/可选(O) | 功能 |
add_num | Integer类型,可选 | O | 角标消息的数量 |
class | String类型,可选 | O | 桌面图标对应的应用入口Activity类。 |
参数名称 | 类型 | 参数含义 |
code | String | 错误码 80000000:成功 80200001:Oauth认证错误 80200003:Oauth Token过期 80100003:消息结构体错误 80300008:消息体大小超过系统设置的默认值(4K) 80300002:APP被禁止发送 80300007:无效的Token |
msg | String | 错误码描述 |
requestId | String | 请求标识 |
典型的通知栏消息: { "validate_only": false, "message": { "notification": { "title": "Big News", "body": "This is a Big News!" }, "android": { "notification": { "title": "Noti in Noti title", "body": "Noti in Noti body", "click_action": { "type": 1, "intent": "#Intent;compo=com.rvr/.Activity;S.W=U;end" } } }, "token": ["AAWWHI94sgUR2RU5_P1ZptUiwLq7W8XWJO2LxaAPuXw4_HOJFXnBlN-q5_3bwlxVW_SHeDPx_s5bWW-9DjtWZsvcm9CwXe1FHJg0u-D2pcQPcb3sTxDTJeiwEb9WBPl_9w"] } } 典型的透传消息: { "validate_only": false, "message": { "token": ["AAWWHI94sgUR2RU5_P1ZptUiwLq7W8XWJO2LxaAPuXw4_HOJFXnBlN-q5_3bwlxVW_SHeDPx_s5bWW-9DjtWZsvcm9CwXe1FHJg0u-D2pcQPcb3sTxDTJeiwEb9WBPl_9w"], "data": "the message to the client app", "android":{ "ttl":"86400" } } } |
应用级错误码
结果码 | 描述 | 解决措施 |
80000000 | 成功 | 不涉及。 |
80200001 | Oauth认证错误 | 请求HTTP头中Authorization参数里面的Access Token鉴权失败,请检查。 |
80200003 | Oauth Token过期 | 请求HTTP头中Authorization参数里面的Access Token已过期,请重新申请后重试。 |
80100003 | 消息结构体错误 | 消息结构体参数携带错误,请按照此文档中参数描述进行检查。 |
80300008 | 消息体大小超过系统设置的默认值(4K) | 请求消息体超默认值,请减小消息体后重试。 |
80300002 | APP被禁止发送 | 当前应用无权限发送该消息,请检查应用权限。详见FAQ |
80300007 | 无效的Token | 消息请求携带的Push Token无效,请检查。详见FAQ |