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

FirebaseMessaging类未定义configure方法 求正确Flutter推送实现代码

报错原因

configure()方法在firebase_messaging v8.0.0及以上版本已被正式移除,新版SDK采用独立Stream接口分别处理不同生命周期下的推送消息事件

修正后完整代码
import 'dart:io' show Platform;
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

class PushNotificationService {
  final firebaseMessaging = FirebaseMessaging.instance;

  Future initialize(context) async {
    // 请求通知权限(iOS必选,Android可按需配置)
    NotificationSettings settings = await firebaseMessaging.requestPermission(
      alert: true,
      badge: true,
      sound: true,
    );

    if (settings.authorizationStatus == AuthorizationStatus.authorized) {
      // 对应旧版onMessage:处理APP前台运行时收到推送的场景
      FirebaseMessaging.onMessage.listen((RemoteMessage message) {
        // 转为Map兼容原有逻辑,也可直接通过message.data取值
        Map<String, dynamic> messageMap = {
          'notification': {
            'title': message.notification?.title,
            'body': message.notification?.body,
          },
          'data': message.data,
        };
        retrieveRideRequestInfo(getRideRequestId(messageMap), context);
      });

      // 对应旧版onResume:处理APP后台挂起时,点击通知进入的场景
      FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
        Map<String, dynamic> messageMap = {
          'notification': {
            'title': message.notification?.title,
            'body': message.notification?.body,
          },
          'data': message.data,
        };
        retrieveRideRequestInfo(getRideRequestId(messageMap), context);
      });

      // 对应旧版onLaunch:处理APP完全终止时,点击通知启动APP的场景
      RemoteMessage? initialMessage = await firebaseMessaging.getInitialMessage();
      if (initialMessage != null) {
        Map<String, dynamic> messageMap = {
          'notification': {
            'title': initialMessage.notification?.title,
            'body': initialMessage.notification?.body,
          },
          'data': initialMessage.data,
        };
        retrieveRideRequestInfo(getRideRequestId(messageMap), context);
      }
    }
  }

  // 原有业务方法无需修改
  String getRideRequestId(Map<String, dynamic> message) {
    // 原有逻辑保留
  }

  void retrieveRideRequestInfo(String rideId, dynamic context) {
    // 原有逻辑保留
  }
}
注意事项
  • 调用initialize方法前必须先完成Firebase全局初始化,需在main函数中执行await Firebase.initializeApp();
  • 如需处理后台静默推送,额外实现FirebaseMessaging.onBackgroundMessage顶层回调即可
  • 若原有getRideRequestId方法可直接适配RemoteMessage类型,可省略转Map的步骤,直接传message对象调用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:15:03