Firebase推送通知在Android应用进程被杀时突然失效的技术求助
解决进程被杀时FEM推送通知无法送达的问题
这种进程被杀后推送失效的情况真的很闹心,尤其是之前版本还能正常运行,结合你提到的使用data payload自定义通知的场景,我给你梳理几个关键排查方向:
确认data payload的接收组件配置
不同于notification payload会由系统自动弹出通知,data payload完全依赖App自身的组件(比如自定义消息服务或广播接收器)来接收并构建通知。你需要检查:- 对应的服务/接收器是否在
AndroidManifest.xml中正确注册,并且添加了正确的intent-filter,比如:<service android:name=".MyFemMessagingService" android:exported="false"> <intent-filter> <action android:name="com.your.fem.MESSAGING_EVENT" /> </intent-filter> </service> - 该组件是否被厂商的后台限制策略拦截(比如被标记为“耗电应用”而禁止后台启动)。
- 对应的服务/接收器是否在
检查系统权限与厂商后台白名单
- Android 12及以上版本,必须主动申请
POST_NOTIFICATIONS权限,否则即使收到data payload,也无法弹出通知。 - 国内主流厂商(小米、华为、OPPO等)都有严格的后台管控,进程被杀后默认不会唤醒App组件。你需要将App加入厂商的「后台白名单」「允许自启动」列表,测试推送是否恢复。
- Android 12及以上版本,必须主动申请
验证payload格式与FEM API状态
- 对比之前能正常工作的payload结构,确保当前的data字段没有格式错误(比如嵌套层级、参数名拼写错误)。纯data payload不需要包含
notification字段,否则系统处理逻辑会变化。 - 检查FEM的设备token是否有效:可以在App内调用API获取当前token,或者在FEM控制台手动发送测试推送,查看Logcat中是否有接收日志。如果进程被杀后无任何日志,说明组件未被成功唤醒。
- 对比之前能正常工作的payload结构,确保当前的data字段没有格式错误(比如嵌套层级、参数名拼写错误)。纯data payload不需要包含
排查近期代码与依赖变动
- 确认是否最近升级了FEM SDK版本,部分版本更新可能会改变推送接收逻辑。
- 检查是否新增了省电优化、进程管理相关的代码(比如使用了
JobScheduler或第三方后台框架),这些可能会干扰推送组件的启动。
内容的提问来源于stack exchange,提问作者Mili
相关产品推荐
相关产品推荐

