Busqué varias horas para implementar la persistencia fuera de línea de Firestore porque es crucial para que mi aplicación funcione. Manejo varios chats dentro de mi aplicación y es un error fatal descargar datos una y otra vez.
Esta es mi muestra de código, es el archivo raíz App.js, que es el primero que se llama:
.... //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 aa time. // ... } else if (err.code == 'unimplemented') { // The current browser does not support all of the // features required to enable persistence // ... } }) };.....Las claves API se ven así:
const firebaseConfig = { apiKey: "***", authDomain: "***", databaseURL: "https://***", projectId: "***", storageBucket: "***", messagingSenderId: "***", appId: "***", measurementId: "***" }; export default firebaseConfig;Recibo el siguiente error que no puedo solucionar:
FirebaseError: está utilizando la compilación de solo memoria de Firestore. El soporte de persistencia solo está disponible a través del paquete @firebase/firestore o la compilación firebase-firestore.js.
Instalé el paquete completo de "firebase" y también accedí a @firebase/firestore, ya verifiqué esto y lo implementé igual que en los documentos oficiales. Todo funciona pero cuando quiero habilitar la persistencia... Se bloquea con el error mencionado anteriormente.
¿Qué puedo hacer ahora? ¿Me falta otro paquete, he hecho algo mal?
Como nota al margen, la persistencia de autenticación funciona perfectamente dentro de mi aplicación, solo falla la persistencia de Firestore.
Actualmente usando firebase SDK 8.2.3
Desarrollé mi aplicación con Expo y me señalaron a expo-firestore-offline-persistence . Noté en su página que hablan de react-native-firebase para habilitar la persistencia en RN, aunque eso parece requerir la expulsión de Expo.
Parece que este es un problema con polyfill en la plataforma RN. En otras palabras, el Javascript que requiere Firestore no tiene todo lo necesario en la plataforma React Native, algo que tendrán los navegadores comunes. Entonces, la "solución" es aprovechar un componente como react-native-firebase o expo-firestore-offline-persistence que le brinda esa capacidad adicional en nativo.