Firebase_messaging:应用程序终止时 onMessageOpenedApp.listen() 不起作用

问题描述 投票:0回答:4

当用户单击其有效负载后面的通知时,我必须打开特定的屏幕(经典...)。 这是代码:

// Listener 2 :: When notif clicked and open the app :
FirebaseMessaging.onMessageOpenedApp.listen((message) async {
      switch (message.data["type"]) {
        case "case1" :
          navigatorKey.currentState!.push(MaterialPageRoute(builder: (_) => Case1Page());
          break;
        case "case2" :
          navigatorKey.currentState!.push(MaterialPageRoute(builder: (_) => Case2Page());
          break;
        default :
          // nothing
      }
    });

问题是它仅在用户单击通知时应用程序处于后台时才有效! 当应用程序被杀死时它不起作用,它只是在主页上打开应用程序

我花了一些时间寻找解决方案,但我只找到了:

  FirebaseMessaging.configure(
    onLaunch: (Map<String, dynamic> message) async {
      navigateToSpecificScreen(message['data']['screen']);
    },
    onResume: (Map<String, dynamic> message) async {
      navigateToSpecificScreen(message['data']['screen']);
    },
  );

但它已经不存在了! 就像这里所说的: https://firebase.flutter.dev/docs/migration/#messaging

据说这已被 onMessageOpenedApp.listen() 方法取代,但我还读到最后一个方法仅在应用程序处于后台时有效,而不是在应用程序被杀死时有效。

那么如何实现这一目标呢? 最新版本的包中 .configure() > .onLaunch() 方法的替换是什么? 我只是在任何地方都找不到它:(

预先感谢您的帮助!

flutter firebase firebase-cloud-messaging
4个回答
1
投票

谢谢元素, 事实上,我做了一些测试,这是我的结论:

FirebaseMessaging.onMessageOpenedApp.listen((message)){} == "OLD" onResume()

仅在应用程序启动和/或在后台且单击通知时激活

FirebaseMessaging.instance.getInitialMessage() == "OLD" onLaunch()

仅在应用程序被杀死时才有效!并点击通知

因此,我必须实现这两个功能,以便在点击重定向时获得通知的完整行为。

我说得对吗? ^^


0
投票

简单地说,这就是侦听功能在 firebase 上的工作原理(仅当应用程序打开且在后台时才有效)。

对于从通知启动应用程序的情况,您可以执行以下操作: 每次启动时您都可以检查 FirebaseMessaging.instance.getInitialMessage(); 这将返回您的通知(如果应用程序直接从操作系统启动,则返回 null)


0
投票

您尝试删除“通知”字段并仅使用“数据”


0
投票

要点击通知打开应用程序并导航到其他屏幕或执行任何其他操作,

注册两个回调,如下所示。

FirebaseMessaging.onMessageOpenedApp.listen((message)){}
-> 当应用程序处于后台状态时将使用此功能

FirebaseMessaging.instance.getInitialMessage()
-> 这将在处于终止状态时使用。

© www.soinside.com 2019 - 2024. All rights reserved.