即使应用程序已被终止,也显示Flutter通知



我正在尝试显示通过FCM发送到android设备的消息。

需要明确的是,我不想在fcm消息中使用notification属性。我更喜欢数据属性,让移动开发人员能够自定义通知。

我们目前有以下设置

Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
log('Got a message whilst in the Background!');
log('Message data: ${message.data}');
displayNotification();
}
Future<void> _firebaseMessagingForegroundHandler() async {
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
log('Got a message whilst in the foreground!');
log('Message data: ${message.data}');
displayNotification();
});
}

以及以下内容:

Future<void> initFirebase() async {
await Firebase.initializeApp();
initFirebaseComponents();
}
void initFirebaseComponents() {
_firebaseTokenRefreshHandler();
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
_firebaseMessagingForegroundHandler();
}

当安卓设备在前台时,通知会完美显示,当应用程序最小化时,通知也会完美显示在后台,但当我们杀死应用程序时,通知不再显示在后台。

我已经搜索过了,没有找到任何解决方案,任何见解都将不胜感激。

由于您的有效载荷是数据消息,因此设备似乎会忽略您的消息,因为数据消息被认为是低优先级的。

这是文件中的一句话:

当您应用程序处于后台或已终止,将被忽略。但是,您可以通过发送额外的FCM有效载荷的属性:

在Android上,将优先级字段设置为高。在苹果(iOS和macOS(上,将contentavailable字段设置为true。

这里的解决方案是在有效负载上设置其他属性。下面是文档中的一个示例负载,显示了如何发送附加属性。

{
token: "device token",
data: {
hello: "world",
},
// Set Android priority to "high"
android: {
priority: "high",
},
// Add APNS (Apple) config
apns: {
payload: {
aps: {
contentAvailable: true,
},
},
headers: {
"apns-push-type": "background",
"apns-priority": "5", // Must be `5` when `contentAvailable` is set to true.
"apns-topic": "io.flutter.plugins.firebase.messaging", // bundle identifier
},
},
}

注意:这只会影响邮件的优先级,但不能保证邮件的送达。

更多信息

相关内容

  • 没有找到相关文章

最新更新