2

我使用 firebase-js-sdk(在 Vue PWA 中)来监听来自 Firestore 的实时更新。

为了在后台恢复应用程序,我使用“vuex-persist”作为应用程序状态。除了应用程序状态之外,我还需要通过在具有相同参数的同一集合上调用 .onSnapshot 来重新建立实时查询。

我想知道 firebase-js-sdk 是否能够重用实时查询,这是在应用程序进入后台之前请求的。否则,每次用户切换到后台和返回时,我都会被收费。

感谢您的帮助,托马斯

4

2 回答 2

1

解决方案:问题不在于如何使恢复(包括实时侦听器的恢复)在技术上正常工作。我主要感兴趣的是如何避免每次发生实时监听器的恢复时都被收费。

根据这两个答案:

如果满足以下先决条件,我将不会被收费:

  • 我重新创建了相同的查询(这反过来生成相同的 resumeToken。resumeToken 是一种密钥,firestore 服务器端使用它来再次识别查询)
  • 该查询的结果集没有数据已更改(firestore 最多跟踪查询 30 分钟,如果发生更改,将使结果集无效)
  • 启用持久性,使客户端 sdk 能够为本地缓存的结果集提供服务
  • 结果集是在过去 30 分钟内生成的(firestore 跟踪查询的最长时间)。如果它较旧,则查询会再次执行,然后我会为此付费。
于 2018-08-30T12:32:02.467 回答
0

您应该在 main.js 或基本上在应用程序启动或带到前台时始终启动的页面中初始化 Firebase,这样即使您的侦听器在您再次进入前台时分离,Firebase 也会启动,因此新的侦听器可以被创建。

所以在你的 main.js 中你会有类似的东西:

import Firebase from 'firebase'
let config = {
    apiKey: "...",
    authDomain: "...",
    databaseURL: "...",
    storageBucket: "...",
    messagingSenderId: "..."
  };

let app = Firebase.initializeApp(config)
let db = app.database()
let booksRef = db.ref('books') 
//....etc///

如果你有正确的设置并在每次加载页面时运行的方法中设置你的监听器,你总是有一个监听器。只要确保避免创建多个侦听器即可。

于 2018-08-27T23:32:39.067 回答