从延迟和安全角度来看,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 云消息通知?

将自定义数据从 Firebase 云消息传递控制台显示到 Flutter 应用程序?

如何在不点击通知的情况下从通知中获取数据(firebase 云消息传递和本机反应)

Firebase 云消息传递 - GCM 规范 ID 是不是仍然需要?

使用 Kotlin 的 Firebase 云消息传递 Android

React-Native - Firebase 云消息传递 - 如果从托盘打开则没有事件