我试图在点击推送通知时实现打开特定屏幕,我的有效负载如下所示:
var payload = {
notification: {
title: notificationTitle,
body: notificationMessage,
click_action:"/screena",sound:"default",
}
};
我收到通知但我无法捕捉到flutter中的通知点击事件如何捕获它 . 我正在使用扑动消息
https://github.com/flutter/plugins/tree/master/packages/firebase_messaging
和我的firebase推送消息服务代码看起来像这样
pushMessagingService() async{
messagingreference.configure(
onMessage: (Map<String, dynamic> message) {
print("I am here in on message");
print(message);
},
onLaunch: (Map<String, dynamic> message) {
print("I am here onLaunch");
print(message);
},
onResume: (Map<String, dynamic> message) {
print("I am hereonResume");
print(message);
},
);
messagingreference.requestNotificationPermissions(
const IosNotificationSettings(sound: true, badge: true, alert: true));
messagingreference.onIosSettingsRegistered
.listen((IosNotificationSettings settings) {
print("Settings registered: $settings");
});
messagingreference.getToken().then((String token) async {
print(token);
});
}
这里我可以得到消息,因为@xqwzts在我的应用程序处于前台时在消息中说,但我的问题是如何从系统托盘中引发的推送通知中捕获点击事件并导航到所需的屏幕 .
2 回答
这里有几件事:
1-
click_action
必须设置为"FLUTTER_NOTIFICATION_CLICK"
必须在有效负载的
data
部分中设置2-click_action
这应该允许您在flutter应用程序的
onMessage
处理程序中接收消息 .从那里你可以拨打
Navigator.of(context).pushNamed(message['screen'])
.如果此时没有
BuildContext
,则可以将GlobalKey
注册为MaterialApp
的navigatorKey
属性,并使用它来全局访问Navigator
,通过GlobalKey.currentState
由于@xqwzts方法适用于在App上接收消息是开放状态,
下面的示例将导航到特定页面,
1st Message Title firebase Cloud 消息传递页面中的部分名为 Notification Data [当应用程序被缩减或关闭时,它将显示为通知]
2nd Message Title seciton which is in the Bottom of th webpage is called Message Data ,[它将显示在内部应用程序中作为通知或警报对话符合您的愿望]
STEPS 创建一个虚拟项目然后使用firebase消息插件,并在该框中将BMW Cars作为主题并单击订阅
现在转到你的控制台,然后发送一条消息,其中包含以下格式,它必须包含
Id
和Status
键,因为我们正在解析Id和状态键,以便显示带有状态键的Vlaue的NextPage,但如果你更喜欢像 Headers 或正文这样的字段,那么你可以这样做但确保在你的flutter代码中解析 Map 值 .