一:注册成为开发者
注册步骤参考:
二:推送的消息形式
华为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.发送:
发送接口地址:
其中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 |
| |
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的时候表示自定义行为。 | |
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;