原创

华为Android消息推送服务接口调用相关问题

点评

个人觉得,相关文档并不友好,浪费很多时间在参数的理解方面,有些地方靠猜,有些地方靠翻源代码

开发方式

结合示例代码+指南+API参考+翻阅源代码

Demo地址

客户端示例代码-推送服务 | 华为开发者联盟

https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Examples/client-sample-code-0000001051066000

服务端示例代码-推送服务 | 华为开发者联盟

https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Examples/server-sample-code-0000001050986079

Android端

下载包出错

据说是,jcenter库不能用了,将其替换为mavenCentral库,在build.gradle中修改

生成jks文件报错

按照指南中提到的,使用2022某个版本的android studio生成jks文件出错,下载keyStore explore,使用其生成jks文件成功

修改包名

比如我的android项目,配置的包名为com.zy.test,将android端中所有包名替换为该名称

成功的标志

手机上获取token成功。

Web端

定时刷新token的定时任务出错

跟踪源代码,发现是首次获取token出错,导致expireIn时间为0,导致创建task定时任务出错。

这里的appid和appsecret具有迷惑性,它其实是应用的client_id和Client Secret。注意,是应用,而非项目。

另外,通过下图可以看见,新版本v2中,可以支持项目id. 有精力的小伙伴可以测试下。

img

下行消息-REST-推送服务 | 华为开发者联盟

https://developer.huawei.com/consumer/cn/doc/development/HMSCore-References/https-send-api-0000001050986197

截至目前(2023-9-2 16:56:20),开源的java server代码还是用的v1,如下图所示。

img

发送message错误代码80300007

错误message:所有Token都是无效的。

官网的相关解释:

常见错误码-推送服务 | 华为开发者联盟

https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/commonerror-0000001059816656

img

我的问题所在

Java Server和android app两端必须用同一项目下应用对应的client id& client Secret. 至于v2版本带来的新变化,参考上面关于token的部分。

源码的理解

重点在Examples & messaging两个目录中,其中examples是测试case,messaging是核心。主要用了auth和push两个rest接口,使用的http client是基础版本。个人认为,一个看点儿,是TokenRefresher,里面用到了定时任务线程池,实现token的定时刷新;另一个看点儿,是HuaweiApp中关于锁的使用,可以关注lock, deleted, appsLock.

如下图所示,这是app, service and client三者之间的关系。Service起到了解耦的作用,便于扩展其它的client(非message client).

HuaweiApp登记所有的app及service, 管理token, 验证,等基础信息。

HuaweiMessageClientImpl提供具体的消息服务,每一个app instance与message client instance是1:1的。

图示  描述已自动生成

下载

KeyStore Explorer - Download

http://keystore-explorer.org/downloads.html

正文到此结束