文档管理中心
我的

此版本文档已归档不再维护,推荐您使用最新版本。

API参考推送服务服务端API(已归档)服务端发送Push消息(已归档)

服务端发送Push消息

1. 接口原型

承载协议

HTTPS POST

接口方向

应用服务器->   PUSH服务器

接口URL

https://push-api.cloud.huawei.com/v1/[appid]/messages:send

2. 接口功能

华为推送提供了两种消息格式:透传消息和通知栏消息。

透传消息:手机收到推送消息后不直接展示,而是将通知消息传递给最终的应用,后续行为由应用决定。

通知栏消息:手机收到推送消息后由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": "你需要设置的信息",

},

… …

}

}

 

更多功能请参考下面参数部分的详细说明。

3. 调用场景

开发者调用Push服务器完成消息下发功能。

4. 接口约束

消息体最大不能超过4096Bytes。按Token发送时,最大Token数不能超过1000。

5. 接口变更

展开

服务器版本

修改日期

修改说明

WiseCloudPushService   1.5.0.102

2019/08/17

第一次发布。

 

6. 请求参数

展开

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的结构体定义:

"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个。

Notification的结构体定义:

{

    "title": string,

    "body": string

}

 

展开

参数值

取值说明

必选(M)/可选(O)

功能

title

String类型

O (发送通知栏消息时本字段与 AndroidNotification结构体中的title两者必须设置一个)

通知栏消息的标题

body

String类型

O (发送通知栏消息时本字段与 AndroidNotification结构体中的body两者必须设置一个)

通知栏消息的内容

 

AndroidConfig的结构体定义:

{

"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的定义。

 

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

 

ClickAction的定义

{

"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开头的地址。

 

BadgeNotification的定义

{

"add_num": Integer,

"class": String

}

 

展开

参数值

取值说明

必选(M)/可选(O)

功能

add_num

Integer类型,可选

O

角标消息的数量

class

String类型,可选

O

桌面图标对应的应用入口Activity类。

 

7. 返回参数

展开

参数名称

类型

参数含义

code

String

错误码

80000000:成功

80200001:Oauth认证错误

80200003:Oauth Token过期

80100003:消息结构体错误

80300008:消息体大小超过系统设置的默认值(4K)

80300002:APP被禁止发送

80300007:无效的Token

msg

String

错误码描述

requestId

String

请求标识

 

8. 调用样例

典型的通知栏消息:

{

"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