firebase - 从延迟和安全角度来看,Firebase 云消息传递类型之间有什么区别?
问题描述
当我们谈论每个用户(而不是每个设备)的个人私人推送通知时,有几种方法可以通过 Firebase 发送它们:
- 收集注册令牌,将它们与受信任服务器上的用户相关联,并向所有已注册令牌发送通知。
- 为每个用户分配一个主题,例如主题/用户 ID,并让应用在成功登录/注销时订阅它。
但是,Firebase 文档建议使用方法号。1,说“为了快速、安全地传送到单个设备或小组设备,请将消息定位到注册令牌,而不是主题。”
一个问题是延迟(指“快速”)问题。在实践中比较注册令牌与基于主题的消息传递真的那么重要吗?
更严重的问题是安全性。Firebase 文档中的“……安全交付……”到底是什么意思,而不是主题?
在我们的例子中,一个设备可能会被多个登录和注销的用户使用。这意味着当用户注销时,注册令牌必须与后端的用户解除关联。如果出现问题并且注册令牌未取消关联,设备将继续获取前人的通知。
这是我必须接受的权衡还是我错过了其他选择?
解决方案
里面有几个问题。让我们看看我是否可以覆盖它们的主要部分。
如果您需要将消息传递到多个令牌,您正在考虑的两种方法是:
- 将应用程序安装/令牌订阅到特定主题,然后将消息传递到该主题。
- 为用户保留您自己的令牌注册表,并在您自己的代码中进行用户到令牌的扇出。
最大的区别在于用户对其代币的扇出发生的位置。当您使用主题时,它由 Firebase 在 Google 的服务器上完成,而在第二种情况下,您自己完成。这两者之间没有保证的性能差异,但在后一种情况下,您有更多的控制权。因此,您会花费更多精力(为 Firebase 可以为您做的事情编写自己的代码),从而获得更多控制权(这可能会或可能不会转化为更好的性能)..
第二个问题是围绕话题的安全性。该文档包含该注释,因为主题通常具有比标记更简单的结构。例如,如果您有一个每个用户的主题,您通常会使用 UID 作为主题 ID。而且由于您可能在其他地方共享该 UID,因此其他用户可能知道用户的 UID。而且由于订阅主题只需要您知道自己的令牌和主题 ID,这意味着任何用户都可以订阅其他用户的主题。
推荐阅读
- php - 可捕获的致命错误:类 mysqli 的对象无法在第 35 行的 C:\wamp64\www\web\index.php 中转换为字符串
- database - Like 运算符不可散列 - Teradata
- selenium - UnreachableBrowserException:与远程浏览器通信时出错。它可能已经死了,并且 Command 未能干净地关闭。强行破坏
- php - Laravel 的 deleteDirectory 忽略了保留标志
- android - Android上的Unity Sqlite本地数据库奇怪的字母
- json - 反序列化新的 Moodle 日志 Json 格式
- node.js - 在一个页面中同时加载 2 个 react 应用程序。只有单个应用程序可见
- spring-mvc - 当我传递已经显示的参数时,为什么我得到一个空值?
- javascript - 如何从打字稿上的txt文件中获取数据?
- sql - utPLSQL - 将参数(l_message)传递到过程中。不传递价值。