JAVA集成华为推送 服务端

2023-10-30

一:注册成为开发者

地址:华为开发者联盟-智能终端能力开放,共建开发者生态

注册步骤参考:

文档中心

二:推送的消息形式

华为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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA集成华为推送 服务端 的相关文章

随机推荐

  • 在项目中添加天气预报功能

    查看当地的天气情况 调用七日的天气预报情况 天气预报 注册账号获取appid和APPSecret使用 https www tianqiapi com api 图标可以直接在网站上下载
  • CoreDNS 惊现诡异 bug,导致服务大面积中断

    Sealos 公众号已接入了 GPT 4 完全免费 欢迎前来调戏 原文链接 https juejin cn post 7277471908417110053 我是 LEE 老李 一个在 IT 行业摸爬滚打 17 年的技术老兵 事件背景 某天
  • Flutter开发(十二)—— 页面跳转与返回

    示例代码 以下代码展示页面跳转与返回 抛开所有复杂因素 只展示最简单的跳转 第一个页面 点击按钮时onPressed 进行相应 通过 Navigator push 和 MaterialPageRoute 进行页面跳转功能实现 第二个页面 点
  • python中百分数如何表达_Python转换百分数表示法

    YAML中任何以百分号结尾的数字序列都将 通常作为字符串标量加载 因为 不会 标量匹配任何其他模式 尤其是不匹配整数的模式 或浮动 当然 您可以递归地遍历数据结构 从YAML和patch加载 但是如果在 数据结构 用于构造特定对象 递归到这
  • passwd: Authentication token manipulation error----linux

    author skatetime 2009 04 11 更改centos4 7 linux的root密码 报 passwd Authentication token manipulation error 如下所示 root ticket A
  • react移动端适配

    一 自定义方法配置 1 使用JavaScript动态设置根元素的字体大小 为了实现响应式的自适应效果 可以结合JavaScript根据屏幕大小动态设置根元素的字体大小 可以使用window innerWidth获取窗口的宽度 然后根据需要的
  • Q_PROPERTY

    一 定义 Qt提供了一个成熟的属性系统 Q PROPERTY是一个宏 用来在类中声明一个属性 由于该特性是Qt所特有的 需要moc进行编译 故必须继承QObject 查看Qt助手 我们可以看到如下定义 看不懂 其实 这是一个正则表达式 我们
  • Selenium Web自动化测试框架实践

    功能实现 自动运行用例 自动生成测试报告 自动断言与截图 自动将最新测试报告发送到指定邮箱 自动生成测试报告 数据 页面元素 测试用例分离 执行日志 分布式执行 配置化文件 元素 数据 实践功能 https passport csdn ne
  • AUC,ROC我看到的最透彻的讲解

    面试的时候 一句话说明AUC的本质和计算规则 AUC 一个正例 一个负例 预测为正的概率值比预测为负的概率值还要大的可能性 所以根据定义 我们最直观的有两种计算AUC的方法 1 绘制ROC曲线 ROC曲线下面的面积就是AUC的值 2 假设总
  • 前端异步编程的进化之旅 promise generator aysnc/await

    promise generator aysnc await 1 三者都是异步编程的解决方案 不同的是 promise为较早出来的 其次generator 最后为async await 三者象征了前端进行解决异步编程的进化路程 promise
  • 接口的概念及接口的方法是怎么使用的

    接口 一个完成某些特定功能的类 是一个功能的集合 语法为 接口修饰符 interface 接口名称 成员变量和方法的声明 成员变量默认为public static final类型 类不能多继承 但可通过接口实现多层继承 接口既可以多层继承
  • Opencv-C++笔记 (11) : opencv-图像二值化与LUB查找表

    文章目录 一 概述 二 THRESH BINARY和THRESH BINARY INV 三 THRESH TRUNC 四 THRESH TOZERO和THRESH TOZERO INV 五 THRESH OTSU和THRESH TRIANG
  • Python爬虫进阶必备

    X天下密码加密分析 本次的受害者 aHR0cHM6Ly9wYXNzcG9ydC5mYW5nLmNvbS8 分析 通过输入错误密码抓包查看加密字段 图1 1 图1 1 直接通过检索pwd 定位加密位置 图1 2 图1 2 根据检索结果给对应的
  • 完美解决 IDEA plugins 插件搜索不出结果

    进入设置 勾选Auto detect proxy settings 输入URL http 127 0 0 1 1080 点击OK 最后 重启 IEDA 即可
  • 注解 @Transactional 事务类内调用不生效问题及解决办法

    Transactional 内部调用例子 在 Spring 的 AOP 代理下 只有目标方法由外部调用 目标方法才由 Spring 生成的代理对象来管理 这会造成自调用问题 若同一类中的其他没有 Transactional 注解的方法内部调
  • 基于FPGA的卷积网络加速(1)

    vivado hls是用高级语言设计硬件电路的IDE vivado sdsoc则用于软硬件协同也就是arm传数据到FPGA FPGA把结果传回到FPGA 开发人员不需要知道繁琐的接口的写法 只需要指定硬件函数和调用就可以 卷积神经网络加速
  • [记录学习]自学动力节点老杜MyBatis笔记_02

    MyBatis自学笔记 首先感谢动力节点和杜老师的教学分享 Respect 学习来源 B站 https www bilibili com video BV1JP4y1Z73S p 1 vd source 07c8a1a7d89af39fe2
  • applicationContext.xml和dispatcher-servlet.xml的区别

    Spring 官方文档介绍如下 Spring lets you define multiple contexts in a parent child hierarchy The applicationContext xml defines
  • python简单使用pyecharts库画多饼图

    from matplotlib pyplot import title from pyecharts options global options import TitleOpts from collections import named
  • JAVA集成华为推送 服务端

    一 注册成为开发者 地址 华为开发者联盟 智能终端能力开放 共建开发者生态 注册步骤参考 文档中心 二 推送的消息形式 华为Push建立了一条从应用服务器到终端App之间的通知消息传输通道 App的开发者通过华为Push平台可以方便的向华为