当用户单击其有效负载后面的通知时,我必须打开特定的屏幕(经典...)。 这是代码:
// 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() 方法的替换是什么? 我只是在任何地方都找不到它:(
预先感谢您的帮助!
谢谢元素, 事实上,我做了一些测试,这是我的结论:
FirebaseMessaging.onMessageOpenedApp.listen((message)){} == "OLD" onResume()
仅在应用程序启动和/或在后台且单击通知时激活
FirebaseMessaging.instance.getInitialMessage() == "OLD" onLaunch()
仅在应用程序被杀死时才有效!并点击通知
因此,我必须实现这两个功能,以便在点击重定向时获得通知的完整行为。
我说得对吗? ^^
简单地说,这就是侦听功能在 firebase 上的工作原理(仅当应用程序打开且在后台时才有效)。
对于从通知启动应用程序的情况,您可以执行以下操作: 每次启动时您都可以检查 FirebaseMessaging.instance.getInitialMessage(); 这将返回您的通知(如果应用程序直接从操作系统启动,则返回 null)
您尝试删除“通知”字段并仅使用“数据”
要点击通知打开应用程序并导航到其他屏幕或执行任何其他操作,
注册两个回调,如下所示。
FirebaseMessaging.onMessageOpenedApp.listen((message)){}
-> 当应用程序处于后台状态时将使用此功能
FirebaseMessaging.instance.getInitialMessage()
-> 这将在处于终止状态时使用。