我已经设置了 firebase 推送通知,并且正在我的 flutter 应用程序中接收通知。我就是这样处理的。
Future<void> init() async {
if (Platform.isIOS) {
iosInit();
} else {
await androidInit();
}
getInitialMsg();
//when app in background
FirebaseMessaging.onMessageOpenedApp.listen((msg) {
handleRoutingOnNotificationTap(msg.data);
});
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
showNotification(message);
});
}
我在 runApp() 之前调用此 init()。
我使用 flutter_local_notifications 插件在前台显示通知。因为默认情况下,当应用程序处于前台时收到通知时,它不会显示通知。后台系统默认显示通知。我不手动显示。
void showNotification(RemoteMessage msg) {
RemoteNotification? notification = msg.notification;
if (notification == null) return;
FlutterLocalNotificationsPlugin().show(
...,
payload: msg.data.toString(),
);
}
我在后台和前台都收到通知。我想使用通知数据有效负载实现一些导航逻辑。在当前的实现中,仅当应用程序在后台时通过点击通知(启动应用程序)来启动应用程序时,这才有效。我可以使用这个监听器>
FirebaseMessaging.onMessageOpenedApp.listen((msg) {
handleRoutingOnNotificationTap(msg.data);
});
应用程序运行时点击通知时没有监听器?
所以总而言之,我想要实现的是当应用程序运行(前台)并且用户点击它时接收通知>应该处理一些导航逻辑。我如何实现这个?
找到答案了。我们可以使用flutterLocalNotificationsPlugin的onDidReceiveNotificationResponse。我们可以在
show(...,payload: jsonEncode(msg.data))
中传递一个有效负载字符串(jsonencoded)来显示通知(并传递有效负载),并且我们可以在 onDidReceiveNotificationResponse 回调中处理此有效负载。
`flutterLocalNotificationsPlugin.initialize(initializationSettings,
onDidReceiveNotificationResponse: onDidReceiveNotificationResponse);`