JAVA集成华为推送 服务端

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34820670/article/details/84522971

一:注册成为开发者

地址:https://developer.huawei.com/consumer/cn

注册步骤参考:

https://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush_agent.html?page=hmssdk_huaweipush_prepare

 

二:推送的消息形式

华为Push建立了一条从应用服务器到终端App之间的通知消息传输通道,App的开发者通过华为Push平台可以方便的向华为设备上安装的App推送通知消息。

通知方式分为两种:

  1. 通知栏消息:所谓通知栏消息是指消息通过Push平台发送到Push客户端的时候使用华为默认的消息呈现和点击动作(点击后是需要应用处理的)。
  2. 透传消息:所谓透传消息是指消息通过Push平台发送到Push客户端的时候会透传给对应的App,由App自己控制消息呈现方式和点击动作。

华为push支持单发和多发,单发即一次给一个用户发,多发即一次给多个用户发(目前支持最大用户数为1000)。

 

三:java服务端集成push

  1. 获取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

要获取的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"
 }

失败及其错误代码参考官方文档。

  1. 代码示例:

定义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;

没有更多推荐了,返回首页