项目中要做离线仍然能接受推送的功能,只能集成有系统通道的各大厂商的推送,环信上有小米和华为的集成,但是我司的服务端无法更改环信上的小米和华为推送的内容,只能显示“您有一条新消息”,无奈只能单独集成小米华为魅族推送。OPPO推送处于公测阶段且应用等级要达到OPPO规定的A级,只能以后再去添加,
本文主要侧重集成时遇到的坑:
小米推送:
一.根据小米官网进行配置,文档写的比较详细,这里就提一下流程
1.在小米推送运营平台创建应用, 获取到 AppID , AppKey
2.把从小米下载的 jar 放到 libs 下
3.在 AndroidManifest.xml 中添加权限
4.配置推送服务需要的service和receiver
5.自定义一个BroadcastReceiver类集成PushMessageReceiver
6.在 AndroidManifest.xml 中注册该广播
7.在 Application 中初始化推送服务
集成顺利,没遇到什么坑,但是和环信配合使用时,离线时正常有小米推送,但是在线时只需要换新推送,去掉小米推送。我的处理方式是接收到后立马删除。
后期维护时遇到小米推送接收消息延迟问题,而且有时延迟时间达到十分钟以上,最后小米技术人员给出的解决方案:流控功能在拥堵时会影响消息的送达速度,请关掉flow control再试试。我司后台按照提示改过后就好了。
华为推送:
说实话华为推送真不咋地,文档不光写的烂,而且连一些最基本的方法都没有。和华为技术人员交流给的答复是:目前是简单的通知栏消息,为了用户体验,是没有相关方法进行配置的。哎呦我这暴脾气!自己没写就没写,说什么用户体验!
我用的是华为新版的推送:HMS SDK
一。推送接入:(根据官方文档接入,我这里简单写一下)
1.从HMS Agent中筛选出自己需要的文件,下载后根据文档在在命令行中删除不需要的文件,将剩下的hms文件粘贴到项目中,并更改报错位置。(因为我的是mac,搞这个玩意可把我累死了)
2.生成证书指纹(这个挺坑的,一定获取的是正式版的,开发版的只用于测试。)并获取appid和appkey
在studio上获取证书指纹:在Terminal上输入:
keytool -list -v -keystore jks的完整路径.jks
3.配置 maven仓库和和 gradle
4.然后根据文档配置清单文件(权限,服务,广播等)
5.混淆
6.在application的onCreate方法中初始化HMSAgent
7.在首个Activity的onCreate方法中,调用申请token接口。之后会触发启动Push服务,token申请成功后,结果会通过广播的方式返回token给应用。调用getToken方法发起请求
以上为华为推送的集成,但是应用在线状体下同时收到环信和华为的推送,但是华为推送并没有删除通知栏的方法,无奈只能删除环信发来的通知栏消息。
当时环信使用的是3.3.8版本的,此版本包含华为的旧版本推送,造成冲突,报错NoSuchMethodError: No virtual method isHuaweiMobileServicesAvailable。将环信更新3.4.3版本就可以了。
魅族推送:
魅族推送有两种,一种是只针对魅族系统的Flyme还有一种可以集成小米华为魅族的全通道方式Ups,因为我 已经集成了小米,华为推送,所以我选择了集成Flyme SDK
集成方式和上面小米华为类似,这里不赘述了,我说一下我遇到的坑。
1.appId的获取错误。APPId是我司产品人员生成好给我的,经过测试不能用,最后发现魅族在应用平台生成的推送不能用,需要在推送平台重新生成一个推送应用,但是这个生成的APPID也不能用,点击打开应用,最上面点击配置管理,之后最下面的魅族渠道的APPID才是正确的。之后点击”魅族推送到后台“,在这里测试推送才是正确的。