一:注册成为开发者
地址:华为开发者联盟-智能终端能力开放,共建开发者生态
注册步骤参考:
文档中心
二:推送的消息形式
华为Push建立了一条从应用服务器到终端App之间的通知消息传输通道,App的开发者通过华为Push平台可以方便的向华为设备上安装的App推送通知消息。
通知方式分为两种:
- 通知栏消息:所谓通知栏消息是指消息通过Push平台发送到Push客户端的时候使用华为默认的消息呈现和点击动作(点击后是需要应用处理的)。
- 透传消息:所谓透传消息是指消息通过Push平台发送到Push客户端的时候会透传给对应的App,由App自己控制消息呈现方式和点击动作。
华为push支持单发和多发,单发即一次给一个用户发,多发即一次给多个用户发(目前支持最大用户数为1000)。
三:java服务端集成push
- 获取access_token:
获取access_token接口地址:
https://login.cloud.huawei.com/oauth2/v2/token
注:APPSecret 和 AppID 是注册成为开发者后产生的。
参数字段 |
是否必选 |
描述 |
grant_type |
true |
必须为 “client_credentials” |
client_id |
true |
申请的AppID |
client_secret |
true |
申请的AppSecret |
scope |
false |
以空格分隔的权限列表,若不传递此参数,默认权限包括 (nsp.auth nsp.user nsp.vfs nsp.ping openpush.message) |
请求返回的结果:
字段 |
意义 |
access_token |
|
expires_in |
Access Token的有效期,以秒为单位 |
scope |
Access Token的访问范围,即用户实际授予的权限列表(用户在授权页面时,有可能会取消掉某些请求的权限)。 |
error |
错误码。详细含义请参见下面“HTTP协议错误码”和“业务级错误码” |
error_description |
错误描述信息,用来帮助理解和解决发生的错误 |
例:
成功:
{
"access_token":"BFEsZqBuaW\/\/9GGn1mLt+KykzfBObIy6V3eN20ufoNiAERl33oVGzlN5TE5qeA==",
"expires_in": 86400,
}
失败:
{
"error": "1101",
"error_description": "invalid request"
}
2.发送:
发送接口地址:
https://api.push.hicloud.com/pushsend.do?nsp_ctx=%7b%22ver%22%3a%221%22%2c+%22appId%22%3a%2210923253325%22%7d
其中nsp_ctx为url-encoding编码,解码后为: nsp_ctx={"ver":"1", "appId":"10923253325"}
其中:ver:用来解决大版本升级的兼容问题;
appId:用户在联盟申请的APPID;
以上这是华为官方文档的解释,解码后请求的地址:
https://api.push.hicloud.com/pushsend.do?grant_type=client_credentials&client_secret={0}&client_id={1}
该接口需要的参数:
参数名称 |
是否必选 |
描述 |
access_token |
true |
通过 https://login.cloud.huawei.com/oauth2/v2/token 接口获取 |
nsp_ts |
true |
服务请求时间戳,自GMT 时间 1970-1-1 0:0:0至今的秒数。如果传入的时间与服务器时间相差5分钟以上,服务器可能会拒绝请求。 |
nsp_svc |
true |
本接口固定为openpush.message.api.send。 |
device_token_list |
true |
JSON数值字符串,单次最多只是1000个。 |
expire_time |
false |
格式ISO 8601[ 格式为:yyyy-MM-dd'T'HH:mm:ssXXX]:2013-06-03T17:30,采用本地时间精确到分钟。此值为发出去消息的超期时间,即:如果用户没有在线,此消息会保存到PUSH服务器的时间。 |
payload |
true |
描述投递消息的JSON结构体,描述PUSH消息的:类型、内容、显示、点击动作、报表统计和扩展信息具体参考下面的详细说明。 |
Payload里对应的参数说明:
参数名称 |
类型 |
父级项 |
描述 |
hps |
JSON Object |
|
华为Push消息总结构体 |
msg |
JSON Object |
hps |
Push消息定义。 包括:消息类型、消息内容、消息动作 |
type |
Integer |
msg |
取值含义和说明: 1 透传异步消息 3 系统通知栏异步消息 |
|
body |
JSON Object /String |
msg |
消息内容。 注意:对于透传类的消息可以是字符串,不必是JSON Object。 |
content |
String |
body |
消息内容体 |
title |
String |
body |
消息标题 |
action |
JSON Object |
|
消息点击动作 |
type |
Integer |
action |
1 自定义行为:行为由参数intent定义 2 打开URL:URL地址由参数url定义 3 打开APP:默认值,打开App的首页 |
param |
JSON Object |
action |
关于消息点击动作的参数 |
intent |
String |
param |
Action的type为1的时候表示自定义行为。 开发者可以自定义Intent,用户收到通知栏消息后点击通知栏消息打开应用定义的这个Intent页面 |
url |
String |
param |
Action的type为2的时候表示打开URL地址 |
appPkgName |
String |
param |
需要拉起的应用包名,必须和注册推送的包名一致。 |
ext |
JSON Object |
hps |
|
biTag |
String |
ext |
设置消息标签,如果带了这个标签,会在回执中推送给CP用于检测某种类型消息的到达率和状态。 |
customize |
JSON Object |
ext |
扩展样例:[{"season":"Spring"},{"weather":"raining"}] 说明:这个字段类型必须是JSON Array,里面是key-value的一组扩展信息。 |
返回结果:
例:
成功: {
"code": "80000000",
"msg":"success",
"requestId":"124198421401"
}
失败及其错误代码参考官方文档。
- 代码示例:
定义appSecret,appId,获取access_token的url、发送的url
注:APPSecret 和 appId 配置在application.properties文件里,通过定义的全局方法来获取。
获取access_token:
定义发送的方法:
首先判断assess_token是否过期,过期则重新获取。定义传参的实体类PushParam,以防止参数过多或参数改动方便增加修改。
定义deviceTokens参数,为每个设备的设备标识。
消息内容和标题参数,父级项同为body
定义消息点击动作的参数,appPkgName:注册时需要推送的包名。 intent:自定义动作,如app收到推送后点击打开到某个需要的页面。
定义消息的点击动作,type=1时为自定义动作,即intent。Type= 3为默认动作,打开app。
定义消息类型:传透/通知栏,将上面的消息动作action和通知栏需要显示的内容放进meg。
定义扩展信息
放进总体结构,最高父级hps
请求发送接口:
3.在需要的推送的地方,把需要的参数set到pushParma类里,调用sendPushMessage()方法传入需要的参数即可。
注:HttpPost方法可参照华为推送里的服务端demo。 AccessToken类为自己定义,参数为String accessToken,long
expiresIn;