文章目录

前段时间在应用中集成了华为推送,现在终于告一段落了,回首起来,发现一路踩的坑,都是泪啊。

先交待下集成华为推送的背景:由于android手机上的google官方的推送GCM在中国大陆基本是残废,而大陆有些手机厂商可能会干掉这部分,造成GCM推送基本不可用。而像小米、华为等手机厂商对android系统的ROM进行了深度定制,用户可以手机桌面直接将应用程序kill,即使有后台服务,都被会一起干掉,同时android新的版本为了改善手机续行,在6.0开始增加了Doze机制,无疑对推送又是一大打击。综合这些因素,决定选几种推送一起集成进来,其中就有针对华为手机的华为推送。

去华为开发者官网发现,华为推送有两种,不细心还真发现不了。一种是已经明确标识的PUSH服务,另一种是华为移动服务(HMS)PUSH服务仅是提供推送服务,所以一般推送使用这种。如果华为手机没有打开应用自启动也可以使用这种推送,但使用这种推送如果推送多条消息,会在通知栏显示多条通知,不会自动合并成一条,如果是用在IM中作为消息推送,N条消息一过来,用户体验可想而知。而相反,小米的推送就好很多,通知栏通知会自动合并,只显示一条。另外HMS中不仅集成了推送,还包括支付等服务,使用HMS中的推送可以自定义消息通知栏,还可以自定义数据格式,官方称这种方式为透传。PUSH服务只能是系统弹出通知栏,应用没有控制权限,也不能额外的再传递数据,所以使用HMS自定义通知栏通知可以解决通知栏弹出N多通知的问题。PUSH服务HMS在华为手机上相比,前者的通用性更强些。目前在几台华为手机上测试发现,PUSH服务都能注册成功,而HMS在有些手机上不能注册成功,需要打开应用的应用自启动开关,甚至有的手机上根本注册不成功,不管怎么折腾。

那么想要好的推送效果,又想要好的推送体验,唯一解决办法是两种都集成,先通过HMS注册,如果注册不成功,则使用使用PUSH服务

写这篇记录的时候去官网看了一下,官方已经将PUSH服务HMS中的推送合并,下图是官方的文档说明:

PUSH服务与HMS推送合并

另外还有一些坑:

  • 1.华为联盟后台的账号登录后会在浏览器缓存cookie,如果切换账号,发现后台的信息还是上一个账号的,需要清除浏览器cookie缓存才OK。这是同事在使用公司的账号和个人的账号测试时发现的。

  • 2.如果在推送中已经填写了Debug Key的SHA256证书指纹,再改成Release Key的指纹时,发现手机一直获取不到token,解决办法是把手机中相关华为的服务的应用缓存清除掉,特别是华为移动服务。如果还是不行,把华为商城应用升级到最新版本。

添加指纹的位置:

华为联盟后台推送添加SHA256指纹的官网截图

  • 3.如果一直能正常获取到token,突然又不能,解决办法是重启手机再试。

  • 4.如果注册成功,发现收到消息,首先排查服务器端调用华为SDK是否OK,如果服务器端调用OK,没有出现报错之类的问题,然后就是等,可能是10分钟后或者20分钟后,甚至是第二天,你就基本能收到消息了。

  • 自己集成SDK测试时,出现了几次消息没收到的情况,也就是推送丢失了。但使用华为联盟后台推送比使用SDK推送,消息的到达率和准时性要好。

下面这张截图是华为官方的服务介绍:

基本100%送到,远远高于其他推送平台

还有一些问题的解决方案参考这里:

使用HMS推送定义了EMUI的样式导致TimePicker初始化失败

如果还遇到其他问题解决不了,通过QQ找他们技术支持。

希望能帮到一些人,以上。

文章目录