从延迟和安全角度来看,Firebase 云消息传递类型之间有啥区别?
Posted
技术标签:
【中文标题】从延迟和安全角度来看,Firebase 云消息传递类型之间有啥区别?【英文标题】:What is the difference between Firebase cloud messaging types from latency and security perspectives?从延迟和安全角度来看,Firebase 云消息传递类型之间有什么区别? 【发布时间】:2019-07-23 14:26:22 【问题描述】:当我们谈论每个用户(而不是每个设备)的个人私人推送通知时,有几种方法可以通过 Firebase 发送它们:
-
收集注册令牌,将它们与受信任服务器上的用户关联,并向所有已注册令牌发送通知。
为每个用户分配一个主题,例如主题/用户 ID 并让应用在成功登录时订阅它/在注销时取消订阅。
但是,Firebase 文档建议使用方法号。 1、说"For fast, secure delivery to single devices or small groups of devices, target messages to registration tokens, not topics."
一个问题是延迟(指“快速”)问题。在实践中比较注册令牌与基于主题的消息传递真的那么重要吗?
更严重的问题是安全性。 Firebase 文档中的“......安全交付......”与主题相比究竟是什么意思?
在我们的例子中,一个设备可能会被多个用户登录和退出使用。这意味着当用户注销时,必须在后端取消注册令牌与用户的关联。如果出现问题且注册令牌未解除关联,设备将继续获取前人的通知。
这是我必须接受的权衡还是我错过了其他选择?
【问题讨论】:
【参考方案1】:里面有几个问题。让我们看看我能不能覆盖它们的主要部分。
如果您需要向多个令牌传递消息,您正在考虑的两种方法是:
-
为应用安装/令牌订阅特定主题,然后将消息传递到该主题。
为用户保留您自己的令牌注册表,并在您自己的代码中进行用户到令牌的扇出。
最大的区别在于用户对其令牌的扇出发生的位置。当您使用主题时,它由 Firebase 在 Google 的服务器上完成,而在第二种情况下,您自己完成。这两者之间没有保证的性能差异,但在后一种情况下,您有更多的控制权。因此,您会花费更多精力(为 Firebase 可以为您做的事情编写自己的代码),进而获得更多控制权(这可能会或可能不会转化为更好的性能)..
第二个问题是关于主题的安全性。该文档包含该注释,因为主题通常具有比标记更简单的结构。例如,如果您有一个每个用户的主题,您通常会使用 UID 作为主题 ID。而且由于您可能在其他地方共享该 UID,因此其他用户可能知道用户的 UID。而且由于订阅主题只需要您知道自己的令牌和主题 ID,这意味着任何用户都可以订阅其他用户的主题。
【讨论】:
它提出了另一个问题,是否有可能在某个时候让所有注册令牌订阅特定主题?感谢您清理它! 没有公共 API 可以获取主题的令牌列表。以上是关于从延迟和安全角度来看,Firebase 云消息传递类型之间有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
将自定义数据从 Firebase 云消息传递控制台显示到 Flutter 应用程序?
如何在不点击通知的情况下从通知中获取数据(firebase 云消息传递和本机反应)
Firebase 云消息传递 - GCM 规范 ID 是不是仍然需要?