我实现了推送通知(云消息传递),但是当应用程序完全关闭时我无法收到通知。 所以,我搜索了一下,发现我需要使用本地通知。 我开始使用本地通知,但我发现本地通知是基于用户方面的,例如由用户自己安排事件。那么,问题是如何使用 flutter_local_notifications 向所有用户发送通知?
谢谢
答案 0 :(得分:2)
我无法想象本地通知可以解决您的问题。
根据文档:
<块引用>在应用程序可以通过 FCM 接收消息有效负载之前,必须满足一些前提条件:
如果不满足这些条件,您的通知将永远不会收到。如果没有收到通知,那么你打算用本地通知显示什么?
您可以做的是将本地通知与后台获取结合使用。通过后台获取,您可以检查一些 api 是否有一些通知。您必须以某种方式弄清楚哪些已经呈现,哪些尚未呈现。然后你可以使用本地通知来呈现这些。在这种情况下,我认为放弃云消息传递并仅使用后台获取 + 本地通知会更容易。
在 iOS 上,您仍然会面临与后台获取相同的问题。根据他们的文档:
<块引用>当您的应用终止时,iOS 不再触发事件。
答案 1 :(得分:2)
这个问题实际上分为两部分。
flutter_local_notifications
包向其他设备发送通知。对于“未接收”部分:
如果您已正确集成 FCM,则不必担心 在后台或后台根本没有收到推送通知 该应用程序已被终止。
FCM 会自动为您处理推送通知 在后台或应用程序已被终止。
请确保您已将 FCM 正确集成到您的颤振中 项目。
按照此 link 进行正确集成。此外,iOS 集成有点棘手和冗长,请按照此 link 进行 APNs 集成。 如果您没有使用 FCM 正确设置 APN,苹果将无法识别后台状态的推送通知触发器。
现在,对于“通过 flutter_local_notifications
包向其他设备发送通知:
您不能通过 flutter_local_notifications 推送通知,这将委托给 FCM。为此,您必须通过 REST API 调用发送 HTTP request。
示例代码如下:
Future<Response> publishNotification() async {
return await post(
'https://fcm.googleapis.com/fcm/send',
headers: <String, String>{
'Content-Type': 'application/json',
'Authorization': 'key=$firebaseServerKey',
},
body: jsonEncode(
<String, dynamic>{
"to": firebaseDeviceToken,
'priority': 'high',
"data": <String, dynamic>{
'click_action': 'FLUTTER_NOTIFICATION_CLICK',
"body": "Order#10",
"title": "New Order",
"status": "done",
"screen": "NotificationPage",
"description": "Order Details",
}
},
),
);
}
您可能会补充说我想向多个设备发送通知。
为此,只需将 token
替换为 registration_ids
并将您的设备令牌列表放在 registration_ids
上。
示例代码:
Future<Response> publishNotification() async {
return await post(
'https://fcm.googleapis.com/fcm/send',
headers: <String, String>{
'Content-Type': 'application/json',
'Authorization': 'key=$firebaseServerKey',
},
body: jsonEncode(
<String, dynamic>{
"registration_ids": ["token_1", "token_2", ...],
'priority': 'high',
"data": <String, dynamic>{
'click_action': 'FLUTTER_NOTIFICATION_CLICK',
"body": "Order#10",
"title": "New Order",
"status": "done",
"screen": "NotificationPage",
"description": "Order Details",
}
},
),
);
}
我希望我能帮到你。快乐编码 :D