与标题中一样,当用户在应用终止时单击通知时,为了接收自定义数据,当前的解决方法是什么?
好像在Android is not possible上一样,可以在onLaunch上接收数据消息(这是理想的方式) 在IOS上,自从我首先遇到这个问题以来,我还没有尝试过。
有任何线索吗?
其他信息:我通过firebase cloud function
发送的通知的格式如下:
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
},
"data" : {
"Nick" : "Mario",
"Room" : "PortugalVSDenmark"
}
}
}
https://firebase.google.com/docs/cloud-messaging/concept-options
我可以在onResume
上执行操作,但是似乎没有调用onLaunch
。
答案 0 :(得分:2)
这是您的有效载荷应包含数据的格式。它确实起作用,因为这就是我在项目中获得它的方式。另外,为了使一切正常工作,还有一个answer here对于常规项目设置可能会有所帮助:
{
notification: {
title: 'A title',
body: 'The body.'
},
data: {
// your data here
},
android: {
ttl: 3600 * 1000,
notification: {
click_action: 'FLUTTER_NOTIFICATION_CLICK'
}
},
// The below is for iOS specific properties
// apns: {
// payload: {
// aps: {
// badge: 42
// }
// }
// },
tokens: [] // or a single 'token'
}
答案 1 :(得分:2)
我认为,您已经在启动时获取了数据,只需要稍等一下。我写这封信是因为我遇到了同样的事情。
您可以尝试一下吗
mapping
在我的情况下,我也这样使用它并解决了。
firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async { .. },
onResume: (Map<String, dynamic> message) async { .. },
onLaunch: (Map<String, dynamic> message) async {
WidgetsBinding.instance.addPostFrameCallback((_) {
Timer(const Duration(seconds: 7), () {
// your process...
});
});
},
);
答案 2 :(得分:0)
如果您的“活动”处于前台(并且反应不同),则可能会有些棘手。我最喜欢的方法是在Activity中注册本地dotnet ef
,然后从服务中进行BroadcastReceiver
。如果接收方正在运行,则将从该方法中获得 true (这意味着您的应用程序位于前台,否则为 false )。
您可以看到一个示例(使用GCM,但对于FCM来说逻辑相同)Source
这也是一个很好的例子MyFirebaseMessagingService
答案 3 :(得分:0)
在提供程序中,您可以执行以下附加配置,如果在调试中正确完成,则应可视化令牌:
NaN
使用此软件包: https://pub.dev/packages/firebase_messaging在您的项目和Firebase中,在Cloud Messaging->选项->个人数据->密钥(click_action)->值(FLUTTER_NOTIFICATION_CLICK)中,您需要添加FLUTTER_NOTIFICATION_CLICK。
有了这个,您已经可以尝试Firebase推送通知了。