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

ryevplcw  于 2023-06-24  发布在  其他
关注(0)|答案(1)|浏览(145)

我必须打开特定的屏幕时,用户点击通知以下的有效载荷(经典...)。代码如下:

// 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()方法的替代是什么?我在任何地方都找不到:)
提前感谢您的帮助!

de90aj5v

de90aj5v1#

简单地说,这就是listen函数在firebase上的工作原理(只有当应用程序打开并处于后台时才能工作)。
对于从通知启动应用程序的情况,您可以这样做:在每次启动时,您可以检查FirebaseMessaging.instance.getInitialMessage();这将返回您的通知(或空,如果应用程序是直接从操作系统启动)

相关问题