java集成_java集成华为推送

本文档详细介绍了如何使用Java集成华为推送服务,包括获取AccessToken、验证Token、封装并发送PUSH消息的步骤,以及相关官方文档链接,帮助开发者顺利实现华为推送功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

集成华为推送

这类推送一般官方文档都比较详细,如果想要更加详细的了解建议查看官方文档。

官方文档地址:https://developer.huawei.com/consumer/cn/service/hms/pushservice.html

华为推送服务在开发前需要些准备 1.注册认证成为开发者

2.配置应用签名

3.创建产品和应用

4.开通推送服务

这些步骤按照官方文档一步步来就行,我这边是直接拿到了开发所需要的APPID,APP SECRET,PACKAGE NAME

注册和准备工作完成后就可以开始进行后台的代码编写了

第一步 应用服务器获取AccessToken

想要访问华为的服务接口必须需要一个Token,我们第一步就是获取这个Token。

private static String appSecret = "appSecret";//用户在华为开发者联盟申请Push服务获取的服务参数

private static String appId = "12345678";//用户在华为开发者联盟申请Push服务获取的服务参数

private static String tokenUrl = "https://login.cloud.huawei.com/oauth2/v2/token"; //获取认证Token的URL

private static String apiUrl = "https://api.push.hicloud.com/pushsend.do"; //应用级消息下发API

private static String accessToken;//下发通知消息的认证Token

private static long tokenExpiredTime; //accessToken的过期时间

首先定义好需要的参数,在实际开发中这些参数可以存放在数据库,也可以存放在配置文件中,看个人需求。

接下来就是获取Token

private void refreshToken() {

try {

String msgBody = MessageFormat.format("grant_type=client_credentials&client_secret={0}&client_id={1}", URLEncoder.encode(appSecret, "UTF-8"), appId);

String response = HttpUtil.post(tokenUrl, msgBody);

JSONObject obj = JSONObject.parseObject(response);

accessToken = obj.getString(“access_token”);

tokenExpiredTime = System.currentTimeMillis()+(obj.getLong(“expires_in”)-5 * 60)*1000;

} catch (Exception e) {

LOGGER.error("HvPush -- >> 认证Token获取失败!原因:e = {}", ExceptionUtil.getMessage(e));

}

}

获取到了访问Token我们就可以开始推送代码的编写了。

第二步 应用服务器发送PUSH消息

通过前面的代码我们获取到了AccessToken,Token的存放按照不同的需求可以放在redis或者数据库。

在发送消息之前首先先验证AccessToken是否已经过期

if(tokenExpiredTime <=System.currentTimeMillis())

{

refreshToken();

}

接下来进行消息体的封装

// 封装推送消息body,用于显示通知栏消息显示的标题和内容

JSONObject body = new JSONObject();//仅通知栏消息需要设置标题和内容,透传消息key和value为用户自定义

body.put("title","Push message title");//消息标题

body.put("content","Push message content");//消息内容体

// 封装消息点击动作的参数,“com.huawei.hms.hmsdemo”为推送消息中需要打开的应用APK包名。请根据实际包名来修改。

JSONObject param = new JSONObject();

param.put("appPkgName","com.huawei.hms.hmsdemo");//定义需要打开的appPkgName,这个参数在推送服务管理页面可以看到

// 封装消息点击动作,用于定义通知栏点击行为

JSONObject action = new JSONObject();

action.put("type",3);//类型3为打开APP,其他行为请参考接口文档设置

action.put("param",param);//消息点击动作参数

// type为1时可以自定义行为,自定义行为需要app开发者事先给号参数

// param.put("intent", "自定义行为,动作需要app开发者编辑好给你");

// 封装消息类型,用于定义消息类型,区分是通知栏消息还是透传消息。

JSONObject msg = new JSONObject();

msg.put("type",3);//3: 通知栏消息,异步透传消息请根据接口文档设置

msg.put("action",action);//消息点击动作

msg.put("body",body);//通知栏消息body内容示例代码

// 封装扩展消息,扩展消息中可以设置biTag用于消息打点,也可以携带customize参数用于触发通知栏点击事件的onEvent回调。

JSONObject ext = new JSONObject();//扩展信息,含BI消息统计,特定展示风格,消息折叠。

ext.put("biTag","Trump");//设置消息标签,如果带了这个标签,会在回执中推送给CP用于检测某种类型消息的到达率和状态

JSONObject temp = new JSONObject();

temp.put("season","Spring");

temp.put("weather","raining");

JSONArray customize = new JSONArray();

customize.add(temp);

ext.put("customize",customize);

// ext扩展信息这个参数我并没理解到到底是干嘛的 ,在实际的开发中我只使用了ext.put("biTag", "Trump"); 并没有进行customize参数的携带

// 最后将以上信息全部封装整个消息体

JSONObject hps = new JSONObject();//华为PUSH消息总结构体

hps.put("msg",msg);

hps.put("ext",ext);

JSONObject payload = new JSONObject();

payload.put("hps",hps);

消息体参数详细文档地址:https://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush_agent.html?page=hmssdk_huaweipush_api_reference_agent_s2

消息体封装完成后就可以开始发送推送消息了。

// 创建一个数组json用于存放需要推送的设备id,一般是由前段传过来,或者数据库查询出来

JSONArray deviceTokens = new JSONArray();//目标设备Token

deviceTokens.add(regId);

// 封装整个http消息并发送

String postBody = MessageFormat.format(

"access_token={0}&nsp_svc={1}&nsp_ts={2}&device_token_list={3}&payload={4}",

URLEncoder.encode(accessToken,"UTF-8"),

URLEncoder.encode("openpush.message.api.send","UTF-8"),

URLEncoder.encode(String.valueOf(System.currentTimeMillis() / 1000),"UTF-8"),

URLEncoder.encode(deviceTokens.toString(),"UTF-8"),

URLEncoder.encode(payload.toString(),"UTF-8"));

String postUrl = apiUrl + "?nsp_ctx=" + URLEncoder.encode("{\"ver\":\"1\", \"appId\":\"" + appId + "\"}", "UTF-8");

// 发送消息 这里我用的是hutool的HttpUtil工具类发的post请求

String post = HttpUtil.post(postUrl, postBody);

LOGGER.info("华为推送 -- >> 返回结果:" + post);

到此推送完成,返回结果与错误代码对应文档地址:https://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush_agent.html?page=hmssdk_huaweipush_api_reference_agent_s2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值