Flutter项目firebase_messaging在Android10及以上APP长时间闲置后失效
Android 10及以上系统APP闲置时Firebase推送接收失败解决方案
必做排查项
- 校验Firebase消息类型与优先级:安卓10+系统对后台应用的纯数据消息会强制延迟投递,仅前台运行时可正常接收。服务端下发推送必须同时包含
notification和data字段,同时指定android.priority: "high"参数,标记为高优先级混合消息才能在后台/闲置状态下被正常投递。 - 检查AndroidManifest权限与服务配置:
- 安卓13及以上版本必须申请
POST_NOTIFICATIONS动态权限,未获得权限的应用所有推送都不会被系统展示 - 自定义推送前台服务必须添加
android:foregroundServiceType="dataSync"属性,否则安卓12及以上系统会禁止服务在后台启动
- 安卓13及以上版本必须申请
- 适配APP待机分区规则:安卓10新增的应用待机桶机制优先级高于Doze模式,长时间闲置的应用会被划入受限桶,所有高优先级任务包括Firebase推送都会被延迟至少2小时投递。必须引导用户将应用添加到电池优化白名单,原生申请代码如下:
// 跳转电池优化白名单设置页 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) intent.data = Uri.parse("package:" + packageName) startActivity(intent) }
- 校验Firebase依赖版本:使用低于
firebase-bom:32.0.0版本的SDK未适配安卓10+的后台调度规则,会出现令牌刷新异常、高优先级消息标记失败的问题,需升级到最新稳定版SDK。
可用规避方案
- 若业务必须使用纯数据类型推送,可申请
SCHEDULE_EXACT_ALARM权限,通过精确闹钟定期唤醒应用主动拉取消息,注意唤醒间隔不要小于15分钟,避免被系统判定为恶意应用纳入受限名单。 - 不要使用自定义后台服务接收推送,直接继承官方
FirebaseMessagingService实现逻辑,自定义服务在安卓10+的后台启动限制下会被系统自动回收,无法长期存活。
内容的提问来源于stack exchange,提问作者Luan Pedro
相关产品推荐
相关产品推荐

