首页 > 解决方案 > 从延迟和安全角度来看,Firebase 云消息传递类型之间有什么区别?

问题描述

当我们谈论每个用户(而不是每个设备)的个人私人推送通知时,有几种方法可以通过 Firebase 发送它们:

  1. 收集注册令牌,将它们与受信任服务器上的用户相关联,并向所有已注册令牌发送通知。
  2. 为每个用户分配一个主题,例如主题/用户 ID,并让应用在成功登录/注销时订阅它。

但是,Firebase 文档建议使用方法号。1,说“为了快速、安全地传送到单个设备或小组设备,请将消息定位到注册令牌,而不是主题。”

一个问题是延迟(指“快速”)问题。在实践中比较注册令牌与基于主题的消息传递真的那么重要吗?

更严重的问题是安全性。Firebase 文档中的“……安全交付……”到底是什么意思,而不是主题?

在我们的例子中,一个设备可能会被多个登录和注销的用户使用。这意味着当用户注销时,注册令牌必须与后端的用户解除关联。如果出现问题并且注册令牌未取消关联,设备将继续获取前人的通知。

这是我必须接受的权衡还是我错过了其他选择?

标签: firebasepush-notificationfirebase-cloud-messaging

解决方案


里面有几个问题。让我们看看我是否可以覆盖它们的主要部分。


如果您需要将消息传递到多个令牌,您正在考虑的两种方法是:

  1. 将应用程序安装/令牌订阅到特定主题,然后将消息传递到该主题。
  2. 为用户保留您自己的令牌注册表,并在您自己的代码中进行用户到令牌的扇出。

最大的区别在于用户对其代币的扇出发生的位置。当您使用主题时,它由 Firebase 在 Google 的服务器上完成,而在第二种情况下,您自己完成。这两者之间没有保证的性能差异,但在后一种情况下,您有更多的控制权。因此,您会花费更多精力(为 Firebase 可以为您做的事情编写自己的代码),从而获得更多控制权(这可能会或可能不会转化为更好的性能)..


第二个问题是围绕话题的安全性。该文档包含该注释,因为主题通常具有比标记更简单的结构。例如,如果您有一个每个用户的主题,您通常会使用 UID 作为主题 ID。而且由于您可能在其他地方共享该 UID,因此其他用户可能知道用户的 UID。而且由于订阅主题只需要您知道自己的令牌和主题 ID,这意味着任何用户都可以订阅其他用户的主题。


推荐阅读