当应用终止时,如何使用firebase_messaging推送通知接收自定义数据?



如标题所示,当用户在应用程序终止时单击通知时接收自定义数据,当前的解决方法是什么?

似乎在Android上无法在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

这是您的有效负载在包含数据的情况下应采用的格式。它确实有效,因为这就是我让它在我的项目中工作的方式。此外,为了使一切正常工作,这里有一个答案可能对一般项目设置有所帮助:

{
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'
}

我认为,您已经在Launch上获得了数据,只需要稍等片刻即可。我写它是因为我遇到了同样的事情。

你能试试这个吗,

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...
});
});
},
);

同样在我的情况下,我像这样使用它,并解决了。

onLaunch: (Map<String, dynamic> message) async {
WidgetsBinding.instance.addPostFrameCallback((ignored) {
Timer.periodic(const Duration(seconds: 1), (timer) {
if (CurrentUser.currentUser != null) {
timer.cancel(); // important **
// redirect process with post details inside data
if (message['data']['type'] == NotifTypes.NEW_POST)
goGroupAndPost(Map.from(message['data'])); 
}
});
});
},

判断您的活动是否在前台(以及不同的反应(可能有点棘手。我最喜欢的方法是在活动中注册本地BroadcastReceiver,然后从服务中执行sendBroadcast。如果您的接收器正在运行,您将从该方法获得true(意味着您的应用程序位于前台,否则为false

您可以看到一个示例(使用 GCM,但 FCM 的逻辑相同( 源

这也是一个很好的例子MyFirebaseMessagingService

相关内容

  • 没有找到相关文章

最新更新