推送问题反馈
问题描述:
-
产品反馈手机退出应用后收不到推送
-
用户反馈开了推送,首先弹出的通知不是球球是道,而是其他的应用.
-
小米系统收到推送不及时
问题分析:
- 应用退出后无法收到推送
- 应用退出后推送延时
- 应用打开后会弹出其他应用的通知
应用退出后无法收到推送
推送的原理是在应用在后台启动一个服务,开启着一个长连接,连接着推送服务器.
- 国产定制ROM禁止了后台程序应用.典型案例:小米系统. 小米定国产定制的系统,ROOT的权限掌握在系统手上,禁止应用后台自启.如果应用有后台服务,会被Android系统休眠.休眠后就无法保持长连接,自然无法收到推送
- 高版本的手机已经自带限制后台功能.从安卓5.0之后,系统自带省电模式与权限管理.特别是在6.0之后的休眠模式,完完全全的禁止系统的后台服务. 5.0之前的Android手机系统,也有自带的禁止后台启动,开机启动的功能.但这并不是真正意义禁止.没有获得Root的最高权限的手机,都无法真正意义的做到完全禁止后台服务.小米系统手机之所以在5.0之前也能禁止后台,因为小米本身就自带ROOT功能,把Root抓在手里,强行休眠应用 5.0之后的手机系统的禁止自启,已经是真正意义上的禁止.
产品手机属于5.1系统,已经可以禁止后台服务.在她手机上,如果杀死应用,则无法收到推送,如果仅仅是退到后台,是可以收到推送
懂球帝能及时收到推送,特别是在小米的系统上,收到的推送特别技术.因为懂球帝用的推送不是极光推送,是小米推送.
应用退出后推送延时
推送延迟是因为客户端应用的后台服务无法保持时刻连接着服务器.当有推送时,客户端因为某个原因,断掉了和服务器的连接.在一段时间之后又重新连接上服务器,得到了推送内容.
连接断掉原因
- 网络不好(比例较少,网络不好一般都能及时重新连接上)
- 应用被用户收到清理,或被系统清理(大部分原因)
应用打开后会弹出其他应用的通知
推送之所以能保持一直连接,是因为推送的后台服务会不断的唤醒自己.前面提到的推送延迟,其实就是推送服务在自我唤醒之后,重新连接服务器后的结果.
唤醒方式:
- 检测被销毁方法,重新唤醒自己.
- 采用多个线程,如其中一个线程被杀死,另外一个线程重新唤醒
- 监听各种事件,开机,锁屏,开屏,来电话,来短信,按音量键等等...
- 用其他应用唤醒.(链式唤醒)
应用打开之后之所以会同时推送其他的应用,正是因为链式唤醒的原因.只要用的是同一个推送,推送就会把所以使用它的应用都唤醒.
案例:打开UC会发现经常这个时候淘宝的推送也弹出来.
原理:UC是阿里的一部分,战略合作伙伴,通过360极客软件检测到打开UC的同时,会尝试唤醒淘宝客户端.
- 尽量减少应用被杀死的可能.
Android系统杀死进程的原理:这个应用一段时间没用了,或者占用过大.
-
减小后台服务服务的占用内存
-
发送正在运行通知.此目的告诉系统这个应用是前台应用,一直使用着,不能优先杀掉.例如在玩着大型游戏的时候,虽然很占用内存,但是不会把游戏本身杀掉.发送正在运行的通知,会告诉系统当前应用正在使用,最好不要杀掉. 典型案例:360安全卫士,音乐播放器,球探.这些应用在打开之后会一直发送一个通知,告诉系统正在运行,所以一般不会被系统删掉.
- 发送一个像素点到桌面做悬浮窗.发送一个悬浮窗口到桌面,这个悬浮窗只有一个像素,肉眼几乎不可见.作用于发送一个正在运行的通知类似,是告诉系统当前应用是前台应用,正在运行,尽量不要杀死. 案例:早期就有360工程师发微博爆料,QQ为了常驻进程,曾经发射一个像素的点到桌面,保持其作为前台应用.
问题解决
- 尝试使用多种其他推送服务
例如懂球帝使用的小米推送,在小米的系统上能百分百及时收到推送
- 可做说明或引导用户,将球球是道加入白名单
- 发送正在运行通知
- 设置一个像素的点做悬浮窗


