为每个用户创建Firebase主题

10
我们有一种设计方法,为每个注册用户创建一个主题。
  1. 创建新用户
  2. 将其保存到我们的数据库中,并生成一个令牌
  3. 当用户在Android或iOS设备上登录时,订阅/topics/{user-token}
因此,如果用户有多个设备,如果我们想发送特定于用户的通知,我们只需将其发送到/topics/{user-token},这样所有设备都可以收到通知。
我们还没有遇到过少数用户的问题,但这对Firebase的限制是否合适,这是一个好的方法吗?

2
如果用例是一个用户有多个设备,则为什么不使用设备组消息传递呢? - AL.
@AL,你说得对,我忘记了,但是如果我们使用它,我们必须管理群组列表,例如如果有人从安卓设备注销,我会向服务器发送请求,删除其registration_id等。但是如果我使用“主题”,我只需在客户端取消订阅即可。如果Firebase可以使用,则我会选择主题。但还是谢谢你的建议。 - Okan Kocyigit
无论哪种方法更方便,都可以。干杯! :) - AL.
1
主题是公开的。任何用户(即使来自不同的应用程序)都可以订阅/topics/{user-token}并接收这些消息。如果您的应用程序可以接受这种情况,那么就没问题了。但请记住,发送到主题的消息基本上是公开的。 - Diego Giorgini
1
正确。但是如果另一个开发人员能够找到它,那么你就会陷入麻烦,因为你无法更改GUID,甚至不知道其他人正在接收你的消息的副本。向特定令牌发送更安全。您可以根据自己的需求选择安全级别。 - Diego Giorgini
显示剩余4条评论
1个回答

17

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

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

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

这不是FCM的安全问题,而是主题API设计的一部分。
如果您需要安全的消息,则可以直接将其发送给设备标记。

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


1
如果您需要安全的消息,您可以直接将它们发送到设备令牌。 - Faizan Mubasher
1
我有同样的问题。我该如何处理,而不是使用主题?将所有设备令牌保存在一个集合中,逐个发送通知? - kironet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接