Android应用退出模式下推送通知无法接收问题排查
退出状态下FCM推送接收失败的排查方案
针对你遇到的「前台/后台推送正常,退出进程后无法接收」问题,结合setBackgroundMessageHandler()已配置的情况,整理以下排查要点:
明确退出模式差异
先区分是「仅退到后台但进程存活」还是「完全杀死进程(滑动清除)」。后者在Android/iOS上的推送机制限制更严格,需针对性排查。Android端核心排查项
- 关闭厂商电池优化:小米、华为、OPPO等国产系统默认会限制杀死进程后的后台活动,需进入应用设置→电池→关闭「电池优化」,并允许「后台活动」。
- 校验Manifest配置:
- 确认已正确声明FirebaseMessagingService子类:
<service android:name=".MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> - 添加开机自启权限(帮助进程重启后恢复推送):
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> - 确保自动初始化开启:
<meta-data android:name="firebase_messaging_auto_init_enabled" android:value="true" />
- 确认已正确声明FirebaseMessagingService子类:
- 检查推送消息优先级:普通优先级消息在进程杀死时可能被系统拦截,需发送高优先级消息(payload中设置
"priority": "high")。
iOS端核心排查项
- 开启后台推送权限:在Xcode的项目Capabilities中,勾选
Background Modes下的Remote notifications。 - 校验推送Payload:必须包含
content-available: 1以唤醒应用,同时若需显示通知,alert字段不可缺失(示例Payload):{ "aps": { "alert": { "title": "测试通知", "body": "这是一条测试消息" }, "content-available": 1, "apns-priority": 5 } } - 检查系统通知设置:确认设备已允许该应用在「退出状态」下显示通知,且未开启「静音」或「隐藏通知」。
- 开启后台推送权限:在Xcode的项目Capabilities中,勾选
setBackgroundMessageHandler() 配置校验
- 确保Service Worker注册正常:在Chrome DevTools的
Application > Service Workers中查看注册状态,无报错。 - 方法内逻辑需异步:避免同步阻塞操作,且数据消息需手动调用
self.registration.showNotification()显示通知(通知消息FCM会自动处理,但数据消息需自定义逻辑)。 - 确认Firebase初始化时绑定了Service Worker:
const registration = await navigator.serviceWorker.register('/firebase-messaging-sw.js'); firebase.messaging().useServiceWorker(registration);
- 确保Service Worker注册正常:在Chrome DevTools的
测试与日志排查
- 用Firebase控制台分别发送「通知消息」和「数据消息」测试,确认两种类型的推送表现。
- 查看设备日志:Android用
adb logcat | grep FirebaseMessaging,iOS用Xcode控制台,定位推送是否被接收、是否被系统拦截。
内容的提问来源于stack exchange,提问作者Hardik Kava
相关产品推荐
相关产品推荐

