【问题标题】:Creating Firebase topic for each user为每个用户创建 Firebase 主题
【发布时间】:2017-02-15 07:54:59
【问题描述】:

我们的设计方法是为每个注册用户创建一个主题。

  1. 创建新用户
  2. 使用生成的令牌将其保存到我们的数据库中
  3. 当用户在android上登录时订阅/topics/{user-token}或 ios 设备。

因此,如果用户拥有多个设备,并且如果我们想要发送特定于用户的通知,我们只需将其发送到 /topics/{user-token},以便所有设备都能接收到。

我们还没有遇到少数用户的任何问题,但这对于 Firebase 的限制是否可以,这是一个好方法吗?

【问题讨论】:

  • 听起来不错。为什么你要为 uid 或 userId 命名为“user-token”,就像 Google 传道者那样?
  • 如果用例是针对具有多个设备的单个用户,为什么不使用Device Group Messaging
  • @AL。你是对的,我错过了,但如果我们使用它,我们必须管理组列表,比如如果有人从 android 设备注销,我已经向我的服务器发送了一个请求,删除它的 registration_id 等。但是如果我使用 @ 987654324@,我只是在客户端取消订阅。如果对firebase没问题,我会选择主题。不过谢谢你的建议。
  • 主题是公开的。任何用户(即使来自不同的应用程序)都可以订阅 /topics/{user-token} 并接收这些消息。如果这对您的应用程序没问题,那么您很好。但请记住,发送到主题的消息基本上是公开的。
  • 正确。但是,如果另一个开发人员可以找到它,那么您就完蛋了,因为您无法更改 guid,而且您甚至都不知道其他人正在接收您的消息副本。发送到特定令牌更安全。您可以根据需要选择安全级别。

标签: android ios firebase firebase-cloud-messaging


【解决方案1】:

(我正在将我的 cmets 移动到答案中)

大多数情况下,为每个用户创建 FCM 主题并不是一个好主意。

发送到 FCM TOPICS 的消息是公开的。任何用户(甚至来自 不同的应用程序)可以订阅 /topics/{user-name} 并接收那些 消息。

示例:
其他开发人员可以从您的 apk 复制 google-services.json 文件。
然后他可以订阅任何主题。
要拦截您的用户消息,攻击者仍然需要猜测 {user-name} 或您正在使用的任何其他标识符。但是,如果您认为这可能发生,那么问题就很大了,因为您永远不会知道是否有人收到了您的邮件副本,而且您通常永远不会更改 {user-name}。

这不是 FCM 的安全问题。这是主题 API 设计的一部分。
如果您需要安全消息,可以将它们直接发送到设备令牌。

如果你仍然想每个用户做一个主题,请注意不要发送敏感数据,或者不应该被第三方拦截的数据。

【讨论】:

  • 请解释一下如果您需要安全消息,您可以将它们直接发送到设备令牌。
  • 我也有同样的问题。我如何处理它而不是主题?将所有设备令牌保存在集合中并一一发送通知?
猜你喜欢
  • 2023-04-05
  • 1970-01-01
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
  • 2012-08-27
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多