Flutter Firebase通知在onMessageOpenedApp与onBackgroundMessage下不显示求助
Flutter firebase_messaging 部分设备回调不展示通知排查方案
1. 设备厂商权限限制排查
- 国内定制ROM(小米、华为、OPPO、VIVO等)默认限制应用后台权限,是部分设备异常的核心原因:
- 检查应用是否开启「通知权限」「自启动权限」「后台活动权限」,部分ROM还需要开启「悬浮窗权限」才能在后台弹出通知
- 部分ROM的电池优化策略会冻结后台进程,导致回调无法触发,需要引导用户将应用加入电池优化白名单
- Android 12+ 设备需要申请
POST_NOTIFICATIONS动态权限,未获取权限的应用无法展示通知,需要在应用启动时主动申请该权限
2. 代码逻辑问题排查
- 你当前
onMessageOpenedApp和onBackgroundMessage共用同一个回调逻辑错误:onBackgroundMessage是应用处于后台/被杀状态收到推送时触发的回调,onMessageOpenedApp是用户点击通知将应用从后台唤起时触发的回调,两个场景的处理逻辑不能混用 - 当前代码仅包含打印逻辑,没有主动弹出通知的代码:如果推送是
data类型,系统不会自动展示通知,需要搭配flutter_local_notifications类库在回调中主动触发通知弹出 - 确认
_firebaseMessagingBackgroundHandler始终为顶层函数,不能是类的成员方法,否则Android端会出现回调触发异常
3. 推送Payload结构排查
- 检查后台推送的Payload结构,部分设备对同时包含
notification和data的混合类型推送处理逻辑有差异,建议统一采用纯data类型推送,由应用自主处理通知弹出,兼容性更高 - 不要在
notification字段中传入特殊字符、超长内容,部分ROM的通知解析逻辑会因此失败,导致通知不展示
4. 依赖与原生配置排查
- 你使用的
firebase_messaging: ^10.0.6版本较旧,已知存在部分Android设备后台回调触发异常的bug,建议升级到firebase_messaging: ^14.0.0以上版本,同时配套升级firebase_core到对应兼容版本 - 检查Android端
AndroidManifest.xml是否配置了默认通知通道,Android 8.0+ 未配置通知通道的应用无法展示通知,示例配置如下:<meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="自定义的通知通道ID" /> - 检查iOS端是否开启了推送权限、后台刷新权限、通知背景模式配置,未开启相关配置的iOS设备无法触发后台推送回调
内容的提问来源于stack exchange,提问作者Eric Melo
相关产品推荐
相关产品推荐

