我刚开始使用Firebase生态系统,并在致力于GCloud数据库实现(数据存储与Firestore)之前进行了一些调查。我的目标客户端是Web /浏览器,我的后端服务将在AppEngine中。
以cloud messaging quickstart为例进行修改,似乎FCM在某些情况下无法使用(隐身模式,Safari,如果权限被阻止)。但是,使用实时数据库更新的friendly chat demo在这些情况下确实可以工作。
任何人都可以解释为什么?
我的目标是在不使用轮询的情况下为客户端订阅事件以更新状态等。将它们放到firestore只是为了绕过通知许可要求,似乎有点过头了。任何见解均表示赞赏。这些事件可以从几个不同的后端服务中分派,并且不排他地绑定到db记录。
答案 0 :(得分:1)
FCM客户端承诺即使在页面未打开的情况下也可以识别您的浏览器。因此,它需要持久地能够识别浏览器。为此,它使用了一个实例令牌,我认为它在浏览器的本地存储中仍然存在。而且,由于隐身窗口具有自己的本地存储空间,因此它成为一个单独的实例ID。
Firebase实时数据库本身不保留有关实例的任何信息。而是在初始化FirebaseApp
实例时传递所有必要的信息,然后获得DatabaseReference
。由于隐身窗口运行相同的代码,因此它正在访问数据库中的相同信息,从而看到相同的结果。
请注意,如果您将Firebase身份验证与实时数据库结合使用,则情况会有所不同。 Auth会将用户令牌保留到本地存储中,因此不会与隐身窗口共享。