预防系统杀死后台应用:队列追踪App被清理后能否接收FCM通知
FCM通知接收与安卓App后台保活问题解答
问题1:App被系统杀死后能否正常接收FCM通知
绝大多数场景下,只要使用FCM通知类型消息,App被系统杀死后仍可正常收到通知。
FCM的推送链路依赖Google Play服务的系统级进程实现,不需要你的应用进程保持存活:
- 如果你发送的是通知消息:消息会直接由Google Play服务处理,调用系统通知栏弹出,完全不需要你的App进程参与,就算进程被系统回收也能正常接收。
- 如果你发送的是数据消息:这类消息需要交给你的App进程自主处理,一旦App被系统杀死,消息会暂存到FCM服务器,直到App下次启动才会下发,无法实时收到。
例外情况包括:用户手动在系统设置里强制停止App、用户关闭了你的App的通知权限、设备无Google Play服务(多为国内安卓定制系统)、安卓13及以上系统未授予POST_NOTIFICATIONS权限。
问题2:避免App被系统杀死的可行方案
- 优先调整FCM消息选型:叫号通知优先使用通知类型消息实现,不需要App进程存活即可弹出,从根源上规避进程被杀死的影响。如果需要附带自定义业务数据,可以在通知消息里额外携带data字段,用户点击通知拉起App后再处理对应逻辑即可。
- 合理使用前台服务:如果你的App确实需要后台实时运行同步队列状态,可以启动前台服务,通过
startForeground()方法绑定一个常驻通知栏提示,前台服务的进程优先级远高于普通后台进程,系统几乎不会主动回收。注意安卓12及以上需要申请FOREGROUND_SERVICE权限。 - 引导用户配置系统白名单:引导用户将App加入系统电池优化豁免列表,关闭针对你的App的省电策略,可大幅降低App被后台回收的概率。
- 适配国内无GMS设备:针对国内没有Google Play服务的安卓设备,接入对应厂商的系统级推送通道,实现和FCM一致的、App被杀死仍可接收通知的效果。
- 不要使用违规保活方案:禁止使用互相唤醒、后台轮询、恶意占用系统资源的黑科技保活手段,这类方案不仅会被安卓系统的最新机制检测到优先杀死,还会导致App被应用商店下架。
内容的提问来源于stack exchange,提问作者Ananda Pramono
相关产品推荐
相关产品推荐

