java集成华为推送
集成华为推送
这类推送一般官方文档都比较详细,如果想要更加详细的了解建议查看官方文档。
官方文档地址:https://developer.huawei.com/consumer/cn/service/hms/pushservice.html
华为推送服务在开发前需要些准备 1.注册认证成为开发者
2.配置应用签名
3.创建产品和应用
4.开通推送服务
这些步骤按照官方文档一步步来就行,我这边是直接拿到了开发所需要的APPID,APP SECRET,PACKAGE NAME
注册和准备工作完成后就可以开始进行后台的代码编写了
第一步 应用服务器获取AccessToken
想要访问华为的服务接口必须需要一个Token,我们第一步就是获取这个Token。
1 2 3 4 5 6 7
| private static String appSecret = "appSecret"; private static String appId = "12345678"; private static String tokenUrl = "https://login.cloud.huawei.com/oauth2/v2/token"; private static String apiUrl = "https://api.push.hicloud.com/pushsend.do"; private static String accessToken; private static long tokenExpiredTime;
|
首先定义好需要的参数,在实际开发中这些参数可以存放在数据库,也可以存放在配置文件中,看个人需求。
接下来就是获取Token
1 2 3 4 5 6 7 8 9 10 11 12
| 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是否已经过期
1 2 3 4 5
| if(tokenExpiredTime <=System.currentTimeMillis()) { refreshToken(); }
|
接下来进行消息体的封装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| JSONObject body = new JSONObject(); body.put("title","Push message title"); body.put("content","Push message content");
JSONObject param = new JSONObject(); param.put("appPkgName","com.huawei.hms.hmsdemo");
JSONObject action = new JSONObject(); action.put("type",3); action.put("param",param);
JSONObject msg = new JSONObject(); msg.put("type",3); msg.put("action",action); msg.put("body",body);
JSONObject ext = new JSONObject(); ext.put("biTag","Trump"); JSONObject temp = new JSONObject(); temp.put("season","Spring"); temp.put("weather","raining"); JSONArray customize = new JSONArray(); customize.add(temp); ext.put("customize",customize);
JSONObject hps = new JSONObject(); 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
消息体封装完成后就可以开始发送推送消息了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| JSONArray deviceTokens = new JSONArray(); deviceTokens.add(regId);
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");
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