ios - Flutter - Firebase 云消息传递,iOS 上未收到数据消息
问题描述
通知处理程序
void firebaseCloudMessagingListeners() {
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
print('onMessage ==> $message');
messageHandler(message);
},
onResume: (Map<String, dynamic> message) async {
print('onResume ==> $message');
messageHandler(message);
},
onLaunch: (Map<String, dynamic> message) async {
print('onLaunch ==> $message');
messageHandler(message);
},
onBackgroundMessage: Platform.isIOS ? null : myBackgroundMessageHandler,
);
}
static Future<dynamic> myBackgroundMessageHandler(
Map<String, dynamic> message) {
print('onBackgroundMessage ==> $message');
if (message.containsKey('data')) {
final dynamic data = message['data'];
print('$data');
}
if (message.containsKey('notification')) {
final dynamic notification = message['notification'];
print('$notification');
}
return null;
}
发布https://fcm.googleapis.com/fcm/send
{
"to": "myFCMToken",
"priority": "high",
"data": {
"click_action": "FLUTTER_NOTIFICATION_CLICK",
"data_title": "data_title",
"data_body": "data_body"
},
"notification": {
"title": "Good Night",
"body": "Wish you have a nice dream..",
"sound": "default"
}
}
当我发送带有上述有效负载的通知时,通知被传递到系统托盘,当我点击它时,我遇到了以下三个情况:
- 应用程序处于后台(关闭/终止),显示“数据”并调用 onLaunch 方法。
- 应用程序处于后台(最小化),“数据”丢失,未调用 onResume 方法。
- 应用程序在前台,“数据”丢失,onMessage 方法没有被调用。
问题是,如何接收或处理带有通知的“数据”也传递到系统托盘?任何帮助,将不胜感激。
解决方案
在 iOS 上,数据直接附加到消息中,并且省略了附加数据字段。要在两个平台上接收数据,您的 myBackgroundMessageHandler() 函数应如下所示:
Future<void> myBackgroundMessageHandler(Map<dynamic, dynamic> message) async {
var data = message['data'] ?? message;
print(data);
String expectedAttribute = data['expectedAttribute'];
}
您可以在 Firebase Messaging Flutter 文档的“带有附加数据的通知消息”部分下了解更多信息。
推荐阅读
- go - 为什么我的普罗米修斯标签不显示?
- android - 当我单击离开然后返回 Android Studio 时如何保留片段的状态
- python - AssertAlmostEqual 表示字典中的值
- python - 在 Python 中,如何从列表中删除某些数据以创建新数据?
- excel - 如果某些数字不存在,VBA Excel 删除行
- c# - 尝试在调试中查看属性会在时间延迟后给出不同的计数。这是因为延期执行吗?
- java - SFTP 连接器 DH 密钥错误
- c# - 执行单元测试时 C# 配置管理器引用 machine.config 而不是 app.config
- node.js - 当 headers 为 true 时,fast-csv 返回未定义的数据
- java - 单击按钮(清单按钮)后,“应用程序名称”已停止