颤动中特定设备的Firebase消息通知
Posted
技术标签:
【中文标题】颤动中特定设备的Firebase消息通知【英文标题】:Firebase Messaging notification for specific device in flutter 【发布时间】:2020-06-26 15:13:48 【问题描述】:我正在开发一个颤振应用程序,其中很多服务器请求都在我们的自定义服务器上实现,包括登录/注册。但是,我们决定使用 Firebase Cloud Messaging 进行通知。例如,应用程序中包含一个聊天功能。
在端到端消息传递过程中,随着消息被发布到我们的服务器,用户应该在他们的特定设备上收到通知。我已经在应用程序中成功实现和配置了firebase
,并且可以从控制台发送消息,但我需要让它在特定设备上工作。
// Replace with server token from firebase console settings.
final String serverToken = '<Server-Token>';
final FirebaseMessaging firebaseMessaging = FirebaseMessaging();
Future<Map<String, dynamic>> sendAndRetrieveMessage() async
await firebaseMessaging.requestNotificationPermissions(
const iosNotificationSettings(sound: true, badge: true, alert: true, provisional: false),
);
await http.post(
'https://fcm.googleapis.com/fcm/send',
headers: <String, String>
'Content-Type': 'application/json',
'Authorization': 'key=$serverToken',
,
body: jsonEncode(
<String, dynamic>
'notification': <String, dynamic>
'body': 'this is a body',
'title': 'this is a title'
,
'priority': 'high',
'data': <String, dynamic>
'click_action': 'FLUTTER_NOTIFICATION_CLICK',
'id': '1',
'status': 'done'
,
'to': await firebaseMessaging.getToken(),
,
),
);
这是在 Flutter 中发送消息的文档化方式。但是,这会将通知发送给所有用户,而不是单个用户。那么,如何定位特定用户呢?
【问题讨论】:
这不会向所有用户发送消息。这仅向当前设备发送消息,仅用于测试目的。您应该设置一个后端来进行正确的设备消息传递。 【参考方案1】:我已经阅读了您想要实现的一些实现,我想您应该按照以下步骤操作:
-
为 Flutter 安装 Firebase Cloud Messaging (FCM)(我看到你已经完成了)
通过调用FCM提供的“getToken”方法获取设备firebase消息令牌
当用户登录 Firebase Cloud Firestore 的文档时保存此令牌以将此设备令牌与用户相关联(或为用户创建一组令牌,以便每个用户拥有多个设备
在您的数据库上发生消息传递时进行监控。当它发生时,收集目标用户,获取与该用户关联的令牌并将一个 FCM 发送到该特定设备 ID。在这一点上,我建议您使用 Firebase Cloud Functions,尽管这可能需要服务器之间的所有数据重复(例如:您的服务器的用户名具有一些 id 并且相同的 id “存在”在 Firestore 内的某些 noSQL 文档中)
希望对您有所帮助。我没有提供任何代码,因为我相信这不是您要搜索的内容。
【讨论】:
【参考方案2】:你需要改变
'to': await firebaseMessaging.getToken(),
到
'to': '$token of specific devices',
.
【讨论】:
以上是关于颤动中特定设备的Firebase消息通知的主要内容,如果未能解决你的问题,请参考以下文章
使用 NodeJs 服务器中的 firebase 云消息在特定时间和日期安排通知
如何在 iOS 中使用 Google Firebase 向特定用户发送推送通知?