You need to enable JavaScript to run this app. ^9.1.2版本firebase_messaging初始化代码无法运行的修改咨询
优惠活动
大模型
产品
解决方案
定价
更多

^9.1.2版本firebase_messaging初始化代码无法运行的修改咨询

firebase_messaging 9.1.2 版本初始化代码适配方案

原代码无法运行的核心原因

  • 存在语法结构错误,FirebaseMessaging.onMessage.listen方法的闭合括号提前截断,导致后续的onLaunch、onResume回调参数全部错位塞入getNotificationSettings的参数列表中,直接引发编译报错
  • 9.x版本的getNotificationSettings方法仅用于获取/申请通知权限,不接收任何消息回调参数,原代码将消息监听逻辑绑定到该方法的写法完全不符合API定义
  • 9.x版本废弃了旧版onLaunch/onResume的回调式写法,所有消息交互逻辑均改为Stream订阅模式
  • 9.x版本的消息对象类型为RemoteMessage,与旧版直接传递Map<String, dynamic>的参数格式不兼容

调整后可正常运行的完整代码

Future initialize(context) async {
  // 单独执行通知权限获取逻辑,移除原方法中错误塞入的回调参数
  NotificationSettings settings = await FirebaseMessaging.instance.getNotificationSettings();
  // 未授权时主动申请通知权限
  if (settings.authorizationStatus == AuthorizationStatus.notDetermined) {
    settings = await FirebaseMessaging.instance.requestPermission();
  }

  // 应用处于前台时收到推送消息的监听,对应原onMessage逻辑
  FirebaseMessaging.onMessage.listen((RemoteMessage message) async {
    String rideRequestId = getRideRequestId(message.data);
    retrieveRideRequestInfo(rideRequestId, context);
  });

  // 应用处于后台时,用户点击通知打开应用的监听,对应原onResume逻辑
  FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) async {
    print("onMessageOpenedApp: $message");
    String rideRequestId = getRideRequestId(message.data);
    retrieveRideRequestInfo(rideRequestId, context);
  });

  // 应用被完全杀死(终止状态)时,用户点击通知打开应用的监听,对应原onLaunch逻辑
  RemoteMessage? initialMessage = await FirebaseMessaging.instance.getInitialMessage();
  if (initialMessage != null) {
    String rideRequestId = getRideRequestId(initialMessage.data);
    retrieveRideRequestInfo(rideRequestId, context);
  }
}

配套适配注意事项

  • 原有getRideRequestId方法的入参需要调整为接收Map<String, dynamic>类型的消息业务数据,不要直接传入整个RemoteMessage对象,否则会出现类型不匹配问题
  • 若需要处理后台静默推送,需要单独定义顶级的onBackgroundMessage回调函数,不能将该回调写在类内部的方法中
  • 若需要自定义前台推送的展示样式,可在onMessage监听中通过message对象的notification字段单独处理,无需额外配置回调参数

内容的提问来源于stack exchange,提问作者yassine guenidi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 02:45:03