【问题标题】:firebaseMessaging configurefirebaseMessaging 配置
【发布时间】:2021-09-21 07:21:28
【问题描述】:

我知道 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,
    );
  }
}

【问题讨论】:

  • 我建议您将代码基于 Flutterfire 在其 GitHub 存储库中提供的示例。见github.com/FirebaseExtended/flutterfire/tree/master/…
  • 你好 @GrahamD 我以前看过它,但是当我复制代码时,我收到一个错误,就像你在我的帖子中看到的那样,不确定我需要什么部分,我不需要什么部分跨度>

标签: firebase flutter dart firebase-cloud-messaging


【解决方案1】:

将 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));

说明:

  • 当应用程序通过 FCM 通知从终止状态打开时,FirebaseMessaging.instance.getInitialMessage() 返回一个 RemoteMessage 对象。这将替换 onLaunch
  • FirebaseMessage.onMessage “返回一个 Stream [of RemoteMessage],当 Flutter 实例在前台时接收到传入的 FCM 有效负载时调用该 Stream。”这将替换 onMessage
  • FirebaseMessage.onMessageOpenedApp "返回一个 Stream [of RemoteMessage],当用户按下通过 FCM 显示的通知消息时调用该 Stream。 如果应用已从后台状态(未终止)打开,则将发送 Stream 事件。”这将替换 onResume

【讨论】:

  • 我欠你的晚餐兄弟,没有更多的错误,不知道我如何才能将优惠券或其他东西作为礼物发送给你。不知道能不能私下联系你
猜你喜欢
  • 1970-01-01
  • 2021-10-18
  • 2021-09-20
  • 2018-12-27
  • 2021-07-11
  • 1970-01-01
  • 2021-04-01
  • 2021-08-09
  • 2020-07-28
相关资源
最近更新 更多