为什么Firebase Realtime db可以在隐身模式下工作,而不能在Firebase Cloud Messaging中工作

时间:2018-12-02 16:08:21

标签: firebase firebase-realtime-database firebase-cloud-messaging

我刚开始使用Firebase生态系统,并在致力于GCloud数据库实现(数据存储与Firestore)之前进行了一些调查。我的目标客户端是Web /浏览器,我的后端服务将在AppEngine中。

cloud messaging quickstart为例进行修改,似乎FCM在某些情况下无法使用(隐身模式,Safari,如果权限被阻止)。但是,使用实时数据库更新的friendly chat demo在这些情况下确实可以工作。

任何人都可以解释为什么?

我的目标是在不使用轮询的情况下为客户端订阅事件以更新状态等。将它们放到firestore只是为了绕过通知许可要求,似乎有点过头了。任何见解均表示赞赏。这些事件可以从几个不同的后端服务中分派,并且不排他地绑定到db记录。

1 个答案:

答案 0 :(得分:1)

FCM客户端承诺即使在页面未打开的情况下也可以识别您的浏览器。因此,它需要持久地能够识别浏览器。为此,它使用了一个实例令牌,我认为它在浏览器的本地存储中仍然存在。而且,由于隐身窗口具有自己的本地存储空间,因此它成为一个单独的实例ID。

Firebase实时数据库本身不保留有关实例的任何信息。而是在初始化FirebaseApp实例时传递所有必要的信息,然后获得DatabaseReference。由于隐身窗口运行相同的代码,因此它正在访问数据库中的相同信息,从而看到相同的结果。

请注意,如果您将Firebase身份验证与实时数据库结合使用,则情况会有所不同。 Auth会将用户令牌保留到本地存储中,因此不会与隐身窗口共享。