firebaseMessaging 配置

firebaseMessaging configure

我知道 firebaseMessaging.configure 已被弃用,我正在尝试切换到新格式 因为 OnMessage、OnLaunch 和 OnResume 都在同一条线上,所以我一直在努力实现这一目标 我遇到了一些参考资料,但不确定如何像上一个那样将三者合二为一,不确定我是否应该这样做

前后对比图

void configureFirebase(FirebaseMessaging _firebaseMessaging) {
    try {


      _firebaseMessaging.configure(
          onMessage: notificationOnMessage,
          onLaunch: notificationOnLaunch,
          onResume: notificationOnResume,


      /*  FirebaseMessaging.onMessage.listen((RemoteMessage message) {
        RemoteNotification notification = message.notification;
        AndroidNotification android = message.notification?.android;
      });

     FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
        print('A new onMessageOpenedApp event was published!');
        Navigator.pushNamed(context, '/message',
            arguments: MessageArguments(message, true)); 

      });

       */





    } catch (e) {
      print(CustomTrace(StackTrace.current, message: e));
      print(CustomTrace(StackTrace.current, message: 'Error Config Firebase'));
    }
  }

  Future notificationOnResume(Map<String, dynamic> message) async {
    print(CustomTrace(StackTrace.current, message: message['data']['id']));
    try {
      if (message['data']['id'] == "orders") {
        settingRepo.navigatorKey.currentState
            .pushReplacementNamed('/Pages', arguments: 2);
      } else if (message['data']['id'] == "messages") {
        settingRepo.navigatorKey.currentState
            .pushReplacementNamed('/Pages', arguments: 3);
      }
    } catch (e) {
      print(CustomTrace(StackTrace.current, message: e));
    }
  }

  Future notificationOnLaunch(Map<String, dynamic> message) async {
    String messageId = await settingRepo.getMessageId();
    try {
      if (messageId != message['google.message_id']) {
        await settingRepo.saveMessageId(message['google.message_id']);
        if (message['data']['id'] == "orders") {
          settingRepo.navigatorKey.currentState
              .pushReplacementNamed('/Pages', arguments: 2);
        } else if (message['data']['id'] == "messages") {
          settingRepo.navigatorKey.currentState
              .pushReplacementNamed('/Pages', arguments: 3);
        }
      }
    } catch (e) {
      print(CustomTrace(StackTrace.current, message: e));
    }
  }

  Future notificationOnMessage(Map<String, dynamic> message) async {
    Fluttertoast.showToast(
      msg: message['notification']['title'],
      toastLength: Toast.LENGTH_LONG,
      gravity: ToastGravity.TOP,
      timeInSecForIosWeb: 6,
    );
  }
}

将 try 块中的代码更新为以下内容:

FirebaseMessaging.instance.getInitialMessage().then((message) {         
  if (message != null) {
    return notificationOnLaunch(message.data);
  }
});
   
FirebaseMessaging.onMessage
  .listen((RemoteMessage message) => notificationOnMessage(message.data));
    
FirebaseMessaging.onMessageOpenedApp
  .listen((RemoteMessage message) => notificationOnResume(message.data));

解释: