【问题标题】:offline/online data sync in firestore - LaravelFirestore 中的离线/在线数据同步 - Laravel
【发布时间】:2021-11-30 18:04:28
【问题描述】:

我正在尝试使用 Laravel 和 vue.js 开发一个 Web 应用程序,即使我处于离线状态,我也可以在其中同步来自 Firestore 的数据。我在firestore 的特性中看到它提供了这个特性。但我不知道如何将此功能添加到我的项目中。我已经为 Laravel 中的 Firestore 克隆了 suhasrkms/laravel-with-firestore。但我面临的主要问题是我不知道如何添加离线代码/持久性。我尝试在 firestore doc 中提供的 resources/js/offline-persistence.js 中添加代码。我也尝试在刀片文件中添加代码。
请提供解决方案,您的回复对我很有价值。

<script type="text/javascript">


    firebase.firestore().enablePersistence()
        .catch((err) => alert(Something failed for enablePersistence, code: ${err.code}));

    firebase.firestore().collection('test')
        .onSnapshot(snaps => {
            if (snaps.empty) { return; }
            const preDataElm = document.getElementById("preData");
            while (preDataElm.firstChild) {
                preDataElm.removeChild(preDataElm.firstChild);
            }
            let list = snaps.docs.map(snap => {
                return {id: snap.id, ...snap.data()};
            });
            let newElm = document.createElement("PRE");
            newElm.innerText = JSON.stringify(list, null, 2);

            return preDataElm.appendChild(newElm);
        });

    function tryMe() {
        document.getElementById("result").innerHtml = "";
        firebase.firestore()
            .collection('test')
            .add({test: new Date().toString()})
            .then((docRef) => alert(Data inserted successfuly ID: ${docRef.id}));
    }
</script>

【问题讨论】:

  • 我的回答有用吗?
  • 感谢您的不断询问,我无法应用它,所以我选择应用 Laravel 的 Chache 包。 :)
  • stackoverflow.com/questions/69835844/… 如果您知道任何解决方案,请检查这个问题。

标签: javascript laravel vue.js google-cloud-firestore


【解决方案1】:

要添加离线代码/持久性,您需要在初始化 Cloud Firestore 时启用或禁用离线持久性,如 documentation 中所述:

  • 对于 Android 和 iOS,默认情况下会启用离线持久性。要禁用持久性,请将 PersistenceEnabled 选项设置为 false。

  • 对于 web,默认禁用离线持久化。要启用持久化,请调用 enablePersistence 方法。 Cloud Firestore 的缓存不会在会话之间自动清除。因此,如果您的网络应用处理敏感信息,请确保在启用持久性之前询问用户他们是否在受信任的设备上。

您还可以参考 stackoverflow case1 和 case2,其中 OP 遇到了类似的问题,但通过将持久性设置为:

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2011-09-10
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 2018-07-11
    • 2016-05-12
    相关资源
    最近更新 更多