在上一个FCM推送发布上线后,我开始了下一个开发任务。这次需要我接入华为服务器实现消息推送,其实接入华为要比接入fcm容易很多,因为华为的内部代码构建结构较为明了,可以很好地让开发者进行阅读和理解,从而很好地进行二次开发。话不多说,我写了一个简单的demo,将华为推送进行一个简单的介绍。
目录
1.官方API阅读
华为的官方文档要比谷歌的文档更容易理解,也更为直接,官方地址如下
https://developer.huawei.com/consumer/cn/doc/development/HMS-References/push-sendapi
从文档中可以看出,每次我们可以发送最多1000个token,也就是1000个设备。如果应用超过1000个,那么就需要分批次发送。
如果大家直接从华为的官网下载代码进行阅读,会发现内部的实现代码是在第一次发起请求时启动一个定时任务,这个定时任务是用来更新每次请求发送时华为服务器要求携带的acess_token的,但是我们不建议这样做。作为开发者,我们应该可以自主去更新一个app对应的acess_token,具体的方法我会在下一部分的内容中说明如何请求acess_token。
在请求到access_token之后,下一步就是按照官方的要求发送请求。首先是在请求头中拼接如下的信息,tokenType是我们在请求access_token时返回的字段,一般默认都是Bear。accessToken则是我们请求到的授权码。
httpPost.setHeader("Authorization", tokenType+" "+ accessToken);
httpPost.setHeader("Content-Type", "application/json;charset=utf-8");
在发送完毕后,我们可以根据请求的状态码判断我们的请求是否成功发送到了华为服务器,注意这里是指请求是否到达了华为的服务器,而不是华为向我们回执消息正确收到。
CloseableHttpResponse response = httpClient.execute(httpPost);
String rpsContent = EntityUtils.toString(response.getEntity());
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) {
JSONObject jsonObject = JSONObject.parseObject(rpsContent