Android应用进程被杀死时无法接收Push通知的问题排查
进程被杀后收不到Push消息?这些原因你得排查下
结合你说的前台/后台能正常接收、Postman返回推送成功但杀进程就完全收不到的情况,大概率是下面这些原因,你可以逐一核对:
厂商后台管控(最普遍的问题)
就算你关了电池优化,不少国产安卓厂商(比如小米、华为、OPPO,你提到的LeEco也有这类机制)对第三方App的后台限制很严,进程被杀后会直接切断推送的唤醒通道,尤其是没进厂商白名单的App。你得检查:- 有没有给App开「自启动权限」「关联启动权限」「后台弹出界面」这些权限(在系统的应用权限管理里找);
- 有没有把App加入厂商的保护白名单?比如小米的“神隐模式”白名单、华为的“受保护的应用”;
- 部分厂商还要求开启「通知使用权」,不然推送通道可能被拦截。
推送SDK的进程绑定问题
如果你用的是第三方推送SDK(比如FCM、极光这些),要是推送核心进程和你的App主进程绑在一起,主进程被杀后,推送进程也跟着没了。你可以确认:- SDK有没有配置独立进程?很多SDK支持把推送服务放在单独进程里,这样主进程挂了,推送进程还能活着收消息;
- 初始化逻辑对不对?是不是在Application类里完成的初始化?得保证推送通道在App启动时就建好,而且进程被杀后系统能重新拉起它。
Push消息的格式配置有问题
看你给的推送数据,虽然设了priority":"high",但安卓系统对高优先级消息的处理有条件:- 你的消息里只有
data字段,没有notification字段?在进程被杀后,系统不会主动唤醒App来处理纯data的消息;要是加上notification字段,系统会先弹出通知,用户点击后再唤醒App处理data里的内容; - 检查
click_action是不是正确指向了你App里注册过的Activity,而且这个Activity的启动模式配置有没有问题,别阻止了App唤醒。
- 你的消息里只有
系统级的后台限制没彻底放开
除了厂商的优化,安卓8.0及以上的原生系统对后台进程管得也严:- 你说在部分设备关了电池优化,但要确认是不是真的给这个App开了豁免,有些设备的电池优化是全局的,有些是针对单个App的,别搞错了;
- 有没有开「省电模式」或者「超级省电模式」?这些模式会强制关掉所有非必要的后台进程,包括推送进程。
进程被杀的方式导致无法唤醒
如果用户是通过「设置-应用-强制停止」杀掉的App,安卓系统会直接阻止这个App的所有后台唤醒,直到用户手动重新打开一次App。这种情况下,就算推送消息到了,系统也不会拉起App,必须用户手动启动后才能恢复推送。
内容的提问来源于stack exchange,提问作者TooLazy




