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

firebase_messaging 6.0.16版本onResume/onLaunch失效及iOS收不到推送问题

解决firebase_messaging 6.0.16的回调失效与iOS推送问题

我之前帮不少开发者踩过这个版本的坑,给你整理几个针对性的排查和修复步骤:

一、onResume与onLaunch回调不工作的解决方法

  • 确保初始化时机正确:一定要在runApp()之前完成Firebase的初始化和回调配置。比如在main函数里先调用await Firebase.initializeApp(),紧接着就注册回调,别把配置放在页面初始化或者异步逻辑之后,否则App启动/后台唤醒时可能还没注册上回调。
  • 检查回调注册代码:这个版本的回调是通过FirebaseMessaging.configure()来设置的,代码结构应该是这样的:
FirebaseMessaging.configure(
  onLaunch: (Map<String, dynamic> message) async {
    // 处理App完全关闭时点击通知的逻辑
    print("onLaunch: $message");
  },
  onResume: (Map<String, dynamic> message) async {
    // 处理App在后台时点击通知的逻辑
    print("onResume: $message");
  },
  onMessage: (Map<String, dynamic> message) async {
    // 处理前台收到通知的逻辑
    print("onMessage: $message");
  },
);

注意别写错方法名,也别漏传这两个回调参数。

  • 验证通知Payload格式:Firebase的推送payload必须包含"click_action": "FLUTTER_NOTIFICATION_CLICK"才能触发onResume/onLaunch。如果是通过Firebase控制台发送测试通知,要在自定义数据里添加这个键值对;如果是后端接口发送,要确保payload的结构符合要求,示例如下:
{
  "notification": {
    "title": "测试通知",
    "body": "这是一条测试消息",
    "click_action": "FLUTTER_NOTIFICATION_CLICK"
  },
  "data": {
    "key1": "value1",
    "key2": "value2"
  },
  "to": "设备的FCM令牌"
}
  • 对应场景测试:onLaunch是App被完全杀死(划掉后台)后点击通知触发,onResume是App在后台(没被杀死)时点击通知触发,别搞混测试场景。

二、iOS平台无法接收推送的解决方法

  • 配置APNs证书:去Apple开发者后台生成正确的APNs证书(开发环境选Development,生产环境选Production),然后下载p12文件,上传到Firebase控制台的「项目设置」→「云消息传递」→「iOS应用」里,确保证书和当前测试环境匹配。
  • 添加iOS权限配置:
    1. 在Info.plist里添加后台模式权限:
    <key>UIBackgroundModes</key>
    <array>
      <string>remote-notification</string>
    </array>
    
    1. 添加推送权限描述:
    <key>NSRemoteNotificationUsageDescription</key>
    <string>需要推送通知来提醒您最新消息</string>
    
    1. 在代码里主动请求推送权限:
    await FirebaseMessaging.requestNotificationPermissions(
      const IosNotificationSettings(
        sound: true,
        badge: true,
        alert: true,
      ),
    );
    
  • 确认GoogleService-Info.plist配置:确保这个文件已经正确添加到iOS项目的target中(不是只放在项目根目录),可以在Xcode里检查:选中文件,右侧「Target Membership」勾选对应App target。
  • 使用真机测试:iOS模拟器不支持APNs推送,必须用真实设备测试。如果是生产环境测试,要使用Ad Hoc或App Store打包方式,开发环境用开发证书签名。
  • 处理前台通知:iOS默认不会在App前台显示推送通知,如果你需要前台也显示,可以用flutter_local_notifications插件在onMessage回调里手动弹出本地通知。

额外提醒

firebase_messaging 6.0.16是比较旧的版本了,很多后续版本修复了不少回调和iOS推送的bug,如果可能的话,建议升级到稳定的新版本(比如v10+),能避免很多旧版本的坑。

内容的提问来源于stack exchange,提问作者Apurv Thakkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:33:12