熬战3晚:阿里云移动推送&华为辅助通道离线消息推送实现

现在市面主流app(安卓)使用的可能极光推送、友盟推送多点, 其实阿里云也有集成的移动推送,而且也可以配置厂商通道,确保在安卓app后台进程即使被k掉了页能通过厂商通道实现消息推送。阿里云的移动推送有5w的月免费额度,比起极光来还是查太多。因为手边正好有个华为手机就捣鼓了下华为辅助通道的消息推送测试,期间遇到一些坑,前前后后搞了3个晚上才搞好。本文基本全部基于阿里云git上的alicloud-android-demo里的mpush_android_demo代码实现。

一、创建阿里云“移动研发平台EMAS”的应用空间

参考阿里云官方教程地址(点我),因为用的是git上的demo,所以本段开头的教程你只需要看到应用创建成功就可以了。创建完应用后主要是要用到这个应用的appKey和ppSecret,在后面配置安卓推送的时候会用到。最好先确定好你的安卓应用包名,我这里随便用了个com.ranjuan.testwin;阿里云的后期可以修改,不过华为的应用包名确定好了后好像就不能修改了。

二、注册华为开发者平台创建应用

https://developer.huawei.com/consumer/cn/hms/huawei-pushkit如果是第一次注册开发者平台还要在AppGallery Connect中进行相关配置(先创建一个项目,然后再创建一个应用)

按照提示步骤创建应用,然后就可以拿到应用的APP ID等信息。

记得在上面截图页面“API 管理” 把“推送服务”开关打开

在推送服务中把项目回值打开,并进行配置,配置内容按阿里云官方给的就行

关于本步骤二的如果有不清楚的可以结合阿里云移动推送官方的“华为辅助通道集成”教程操作:https://help.aliyun.com/document_detail/190012.html?spm=a2c4g.11186623.6.588.73642ebebNnvLI

三、在阿里云移动推送平台配置华为厂商通道密钥

直接看附图或者也可以去参考阿里官方的教程地址: https://help.aliyun.com/document_detail/92837.html?spm=a2c4g.11186623.2.13.471f2e97CX9yTF

在阿里云厂商通道这里配置的AppID 和AppSecret对应与第二步骤里的④、⑤标记。

四、下载阿里的git项目并进行相关配置

https://github.com/aliyun/alicloud-android-demo/tree/master/mpush_android_demo;我是把alicloud-android-demo全部下载下来了,虽然后面只用到了里面的推送demo项目。

这里说明下,我在使用该demo的时候提示我的andriodStudio版本过低,需要升级到4.0以上版本才能用。我是直接在网上下载的4.1版本,直接安装安装后提示删除老的配置文件确定就可以了,基本是可以从低版本平滑升级的。

其中mpush_android_demo即为移动推送的Demo APP。
mpush_android_demo已经完成了移动推送SDK的集成工作,但我们还是建议您仔细阅读移动推送的集成文档

1、配置demo里的阿里云推送appid与appkey 以及华为的appid

2、配置安卓项目的包名

这个包名必须与你阿里云、华为上的应用包名一致(我用的是com.ranjuan.testwin)

3、配置项目顶层build.gradle,增加华为仓库地址,3.2.4及以上版本华为sdk不支持手动集成且只能从华为的仓库下载,所以这个步骤必不可少!

 maven { url 'https://developer.huawei.com/repo/' } // HUAWEI Maven repository

4、配置gradle依赖,这里填写最新的辅助通道SDK版本

我测试时最新版本是3.3.0,从git仓库下载下来的是3.2.3,结果测试的时候华为通道在app应用进程被结束时怎么也不能正常推送,可以到阿里官方这边查看最新的sdk对应关系

五、配置华为的“SHA256证书指纹”

操作步骤参考华为官方教程的3-5步骤即可:https://developer.huawei.com/consumer/cn/codelab/HMSPreparation/index.html#2

生成指纹签名的命令:

keytool -list -v -keystore C:xxx生成的jks文件的路径HmsDemo.jks

build.gradle签名配置:

signingConfigs {
        release {
            storeFile file('andriodkKey123456.jks')
            keyAlias 'key0'
            keyPassword '123456'
            storePassword '123456'
            v1SigningEnabled true
            v2SigningEnabled true
        }
    }

六、进行编译及运行

上面有的步骤主要是根据阿里云这边的官方教程修改而来,因为官方教程有点凌乱如果你觉得本文介绍的不够清楚,其他辅助操作可以点这里传送门去官方>>

如果能在logcat日志中看到类似HMSSDK_BaseAdapter: in baseRequest + uri is :push.gettoken, transactionId is : 104214635ttoken20210421010630162643074这样的信息说明华为通道是注册成功了。否则就需要根据对应的错误码再查看时什么原因。一般长链接推送是没有问题的,只要app后台进程在运行就行。

注意阿里云控台消息推送时”高级设置“里一定要配置通知通道。哪怕你不使用里面的厂商通道,如果你想在app进程被k的时候也能推送到目标用户(俗称的离线推送模式),那么必须配置厂商通道。通知后点击跳转activity测试时随便配置了不存在的activity也能收到通知。

测试中华为通道会有点延迟

七、其他原因

日志提示I/HwApiCacheMangerEx: need clear apicache,because volumes changed,oldCnt=1 newCnt=1。可以尝试清除华为的服务缓存: 设置–应用–应用管理—HMS Core—存储–管理空间清除数据。然后卸载测试APP再重新安装。

这次只是在原有的demo基础上折腾就花费了大量时间,不得不说阿里云消息推送这块的教程文档有点太绕(应该说是阿里云的教程都很绕!) 也没有时间修改通知图标以及使用厂商通道离线推送后打开指定acitvity页面。后续有时间再折腾吧~

基于互联网精神,在注明出处的前提下本站文章可自由转载!

本文链接:https://ranjuan.cn/ali-android-push-huawei/

赞赏

微信赞赏支付宝赞赏

rds与ecs自建mysql数据库数据迁移方式
something-about-work
alioss-upload-policy