firebase firestore 离线持久化 FirebaseError

Posted

技术标签:

【中文标题】firebase firestore 离线持久化 FirebaseError【英文标题】:firebase firestore offline persistence FirebaseError 【发布时间】:2021-10-27 17:40:50 【问题描述】:

我搜索了几个小时来实现 Firestore 离线持久性,因为它对我的应用程序运行至关重要。我在我的应用程序中处理多个聊天,每次再次下载数据都是一个致命错误。

这是我的代码示例,它是第一个被调用的根 App.js 文件:

....
//imports related to firebase
import * as firebase from "firebase";
import ApiKeys from "./constants/ApiKeys";


export default function App() 
  //firebase project initialisation
  if (!firebase.apps.length) 
    firebase.initializeApp(ApiKeys);
    var db = firebase.firestore();
    db.settings( experimentalForceLongPolling: true );
    console.log("DB INITIALISED");
    db.enablePersistence() //HERE IS THE PROBLEM
        .catch((err) => 
            if (err.code == 'failed-precondition') 
                // Multiple tabs open, persistence can only be enabled
                // in one tab at a a time.
                // ...
             else if (err.code == 'unimplemented') 
                // The current browser does not support all of the
                // features required to enable persistence
                // ...
            
      )
  ;.....

API 密钥如下所示:

const firebaseConfig = 
    apiKey: "***",
    authDomain: "***",
    databaseURL: "https://***",
    projectId: "***",
    storageBucket: "***",
    messagingSenderId: "***",
    appId: "***",
    measurementId: "***"
  ;

  export default firebaseConfig;

我收到以下无法解决的错误:

FirebaseError:您正在使用 Firestore 的仅内存版本。持久性支持只能通过 @firebase/firestore 包或 firebase-firestore.js 构建获得。

我已经安装了完整的“firebase”包,并且还可以访问@firebase/firestore,我已经检查过了,我实现了它与官方文档中的相同。一切正常,但是当我想启用持久性时...它会因上述错误而崩溃。

我现在能做什么?我错过了另一个包裹,我做错了什么吗?

作为旁注,身份验证持久性在我的应用程序中完美运行,只是 Firestore 持久性失败了。

当前使用 firebase SDK 8.2.3

【问题讨论】:

【参考方案1】:

我使用 Expo 开发了我的应用程序,并被指向 expo-firestore-offline-persistence。我注意到他们在他们的页面上谈论了 react-native-firebase 以在 RN 上启用持久性 - 尽管这似乎需要从 Expo 中弹出。

这似乎是 RN 平台上 polyfill 的问题。换句话说,Firestore 所需的 javascript 并不具备 React Native 平台上所需的一切——这是普通浏览器所具备的。因此,“修复”是利用像 react-native-firebaseexpo-firestore-offline-persistence 这样的组件,为您提供原生的额外功能。

【讨论】:

问题是我已经退出了博览会,但无论如何尝试了expo-firestore-offline-persistence,它抛出了与上面相同的错误。当我使用react-native-firebase 时,我是否需要重新构建我的代码,因为它现在已经实现了,或者编码是否相同? JavaScript SDK for Firestore 中的离线持久性仅在浏览器环境中受支持。因此,除非有 JavaScript SDK 的插入式 polyfill(我对此表示怀疑),否则您必须切换到包含 Firebase 原生 SDK 的 React Native 库,例如 Reach Native Firebase 确实,它还记录了如何使用 @987654323 @. @FrankvanPuffelen - 你所说的 polyfill 就是我在回复中提到的 :) github.com/nandorojo/expo-firestore-offline-persistence/blob/… 不错!没有意识到这是一个下降。?

以上是关于firebase firestore 离线持久化 FirebaseError的主要内容,如果未能解决你的问题,请参考以下文章

Firestore 与 Firebase 的离线问题

使用 Firebase Storage 和 Firebase Firestore 创建离线第一个应用程序的最佳方法是啥? #AskFirebase

缓存视频 Firestore

使用 Flutter 和 Firebase 实现实时在线/离线状态

离线缓存数据的 Firestore 定价说明

如何启用 Firebase 实时数据库离线持久性?