You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter安卓端接入FCM后前台推送正常 无法接收后台通知

问题根因

你当前的代码仅监听了前台消息回调FirebaseMessaging.onMessage和点击通知唤起应用的回调FirebaseMessaging.onMessageOpenedApp,缺少后台/进程终止状态下的消息监听逻辑,同时可能存在平台侧配置缺失、推送载荷不符合规范的问题。

修复步骤

1. 新增后台消息监听回调

FirebaseMessaging.onBackgroundMessage是处理后台消息的专用回调,必须定义为全局顶层函数,不能放在类内部:

// 全局位置定义后台消息处理函数,不要写在Home类内部
@pragma('vm:entry-point')
Future<void> firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  // 处理后台消息前必须先初始化Firebase
  await Firebase.initializeApp();
  // 自定义后台消息处理逻辑,比如存储消息、触发本地通知等
  print('收到后台消息:${message.notification?.title}');
}

在应用启动入口注册该回调:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // 初始化Firebase
  await Firebase.initializeApp();
  // 注册后台消息监听
  FirebaseMessaging.onBackgroundMessage(firebaseMessagingBackgroundHandler);
  runApp(const MyApp());
}

2. 确认推送载荷格式

后台状态下FCM要自动弹出系统通知,推送请求必须包含notification字段,仅含data字段的静默消息不会触发系统通知展示:

// 合法的推送载荷示例
{
  "to": "设备FCM Token",
  "notification": {
    "title": "通知标题",
    "body": "通知正文内容"
  },
  "data": {
    "type": "自定义业务类型",
    "content": "自定义业务参数"
  }
}

3. 补全平台侧配置

  • Android配置:
    • targetSdkVersion ≥33时,需主动申请POST_NOTIFICATIONS权限,否则无法弹出通知
    • 国内ROM需将应用加入自启动、后台活动白名单,关闭电量优化拦截
    • 确认AndroidManifest.xml中已配置FCM所需的服务和元数据
  • iOS配置:
    • Xcode中开启Push Notifications能力,以及Background Modes下的Remote notifications选项
    • Firebase控制台已上传正确的APNs认证文件
    • 必须使用真机测试,iOS模拟器不支持远程推送

4. 可选优化

如果需要自定义后台通知样式、处理静默数据消息,可以搭配flutter_local_notifications插件,在后台回调中主动调用本地通知API展示通知,不受FCM默认规则限制。

内容的提问来源于stack exchange,提问作者Omar Abdelazeem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:18:02