收到FCM时如何自动启动Flutter应用?目前仅可通过点击通知唤起应用
自动唤起Flutter应用的可落地实现方案
能力边界前置说明
- 无系统级特殊签名权限的普通应用,无法在应用被完全杀死、触发系统高功耗限制的场景下强制拉起到前台,所有方案仅覆盖应用处于后台缓存、未被系统回收的状态
- 自动拉起逻辑需符合各应用商店的上架审核规则,不能用于无合理场景的用户骚扰行为
- 不同端的系统限制差异极大,不存在跨端通用的全场景自动唤起能力
分端实现步骤
Android端
- 调整FCM消息发送配置:将需要触发自动拉起的消息设为纯data负载类型(不带notification字段)——带notification字段的消息在应用切后台后,会由FCM SDK直接接管,不会将消息传递到应用代码层的回调逻辑,仅纯data消息会在收到时直接触发应用的前台/后台消息回调
- 配置后台消息回调拉起逻辑:在
firebase_messaging插件注册的全局onBackgroundMessage回调中,识别消息内携带的自动拉起标识字段后,通过Flutter平台通道调用Android原生能力:- 应用处于后台缓存状态时,调用
moveTaskToFront接口将应用任务栈从后台拉到前台 - Android 10及以上版本需提前申请
SYSTEM_ALERT_WINDOW悬浮窗权限,否则后台拉到前台的操作会被系统静默拦截
- 应用处于后台缓存状态时,调用
- 应用被完全杀死场景的特殊处理:仅持有系统级签名的企业内部应用,可配置
RECEIVE_BOOT_COMPLETED权限,配合FCM触发的广播接收器直接启动应用主Activity;公开发布的C端应用禁止使用该逻辑,否则会被应用商店判定为违规行为
iOS端
- 受苹果沙箱权限限制,普通公开发布的应用无任何合法途径,可在收到FCM消息时无用户操作自动拉起前台,系统仅会将消息推送到通知中心,必须由用户点击通知才能唤起应用
- 可落地的降级替代逻辑:收到FCM消息后在后台完成目标页面的数据预加载,当用户后续手动打开应用时直接跳转对应页面,实现“消息到达即完成内容准备”的体验;企业签名的内部应用可通过MDM配置后台应用刷新权限,在收到远程消息时静默拉取数据,依然无法强制弹起前台
常见问题排查
- 排查消息类型:如果发送的FCM消息携带notification字段,应用切后台后代码层完全收不到消息回调,自然无法触发拉起逻辑,需替换为纯data负载
- 排查权限状态:Android端未开启悬浮窗权限时,后台拉起操作会被系统无报错拦截,需在应用首次启动时引导用户将相关权限打开
- 排查系统省电策略:国内定制ROM的后台进程清理策略会在应用切后台短时间内回收进程,导致后台消息回调无法执行,需引导用户将应用加入系统省电白名单
内容的提问来源于stack exchange,提问作者Supuna Warusawithana
相关产品推荐
相关产品推荐

