我试图在单击通知时转到某个页面。当应用程序处于后台或前台时它工作正常,但当应用程序被杀死时它不起作用。
当应用程序被终止时,它会打开应用程序,但不会转到通知数据中定义的路线。
需要快速解决方案
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message)=>
NotificationPop().onOpenApp(message, navigatorKey));
当您想在应用程序被终止时从通知(也称为 RemoteMessage)中导航或捕获数据时,您需要使用 Firebase 包的以下功能:
FirebaseMessaging.instance.getInitialMessage().then((RemoteMessage? message) {
if(message != null && message.data['title'] == 'SomeTitle') {
//Navigate to a page
}
});
将上述函数放入所需页面的 init 函数中,每当您的应用导航到该页面时,上述函数就会被调用。 我假设您已将 firebase 正确集成到您的应用程序中。
Firebase 包提供了不同的方法来处理不同的场景,即终止应用程序、后台应用程序和打开应用程序。
您必须实现
getInitialMessage()
方法来处理终止的应用程序中的通知。
FirebaseMessaging.instance.getInitialMessage().then((RemoteMessage? message) {
//YourCode
});
您还可以检查其他方法来管理差异场景,例如重复通知:
FirebaseMessaging.onMessage.listen((message) //YourCode });
这是简单的解决方案
对处于终止/终止状态的应用程序使用 FirebaseMessaging.instance.getInitialMessage() 代码将是
await FirebaseMessaging.instance
.getInitialMessage()
.then(_firebaseMessagingBackgroundHandler);
下面的_firebaseMessagingBackgroundHandler。此处使用上下文无关导航
Future<void> _firebaseMessagingBackgroundHandler(
RemoteMessage? message,
) async {
if (message == null) return;
print('Title ${message.notification?.title}');
print('Body ${message.notification?.body}');
print('Payload ${message.data}');
await servicelocator<AppRouter>()
.push(NotificationLandingViewRoute(isInbox: true));
}