【问题标题】:Sending notifications from Firebase cloud messaging to a single device将 Firebase 云消息传递中的通知发送到单个设备
【发布时间】:2020-10-15 21:47:23
【问题描述】:

我们正在 Flutter 中构建一个具有聊天功能的应用程序,我已经弄清楚了应该如何完成的几乎所有事情,除了如何将通知仅发送到一个设备(或者可能是几个设备)。

到目前为止,最好的选择是将通知发送到 FCM 注册令牌,因为我们的所有后端都使用 Firebase,但我无法在不知道令牌的情况下这样做。我知道的唯一方法是将其存储在 Firestore 中(例如用户文档)并在需要时检索它。这是一个好的解决方案吗?如果注册令牌发生变化会发生什么?我应该在每次用户打开应用时更新令牌以确保它是正确的吗?

【问题讨论】:

  • 将令牌存储在数据库中是很常见的。要存储令牌,您通常只需要收听onTokenRefresh stream。在 Android 上,您可以在后台处理程序中执行此操作,以便在不使用应用程序时代码也处于活动状态。但我不确定如何在 Flutter 上完成相同的操作。如果这不可能,那么每次应用启动时都这样做确实是一个有效的解决方案。
  • 好的,谢谢。我想我可以在后台执行代码,我会研究一下

标签: firebase flutter google-cloud-firestore firebase-cloud-messaging


【解决方案1】:

您不需要将令牌存储在服务器上,您只需要知道您将消息发送给谁。只需按照以下步骤操作

客户

1.a 应用启动时,通过getToken()检索令牌

1.b 本地存储

1.c 如果发生变化,将其发送到 Cloud 函数,并将其注册到 topicdevice group

1.d 不要忘记注册onTokenRefresh() 以重复 1.a-c 以获得新令牌

服务器

2.a实现1.c对应的功能

2.b 需要时,向主题或设备组发送消息

【讨论】:

  • 我可以直接从flutter订阅主题,我假设和1.c一样?另外,不建议使用主题将通知发送到单个设备,根据这里:firebase.google.com/docs/cloud-messaging/android/… 但也许这是最好的解决方案?
  • 您可以根据需要选择主题或设备组
  • 可以直接从客户端订阅主题吗?我虽然这是一个需要更高权限并且只能从服务器完成的操作...
  • FirebaseMessaging().subscribeToTopic('topic') 至少在颤振中
  • 您不必提供 FCM 服务器密钥吗?
猜你喜欢
  • 2017-01-25
  • 2017-10-04
  • 2017-03-10
  • 2016-12-13
  • 1970-01-01
  • 2023-03-22
  • 2022-08-19
相关资源
最近更新 更多