我必须打开特定的屏幕时,用户点击通知以下的有效载荷(经典...)。代码如下:
// 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()方法的替代是什么?我在任何地方都找不到:)
提前感谢您的帮助!
1条答案
按热度按时间de90aj5v1#
简单地说,这就是listen函数在firebase上的工作原理(只有当应用程序打开并处于后台时才能工作)。
对于从通知启动应用程序的情况,您可以这样做:在每次启动时,您可以检查FirebaseMessaging.instance.getInitialMessage();这将返回您的通知(或空,如果应用程序是直接从操作系统启动)