Estoy usando react-native-firebase en una aplicación expo expulsada e intento crear un sistema de detección de presencia en mi aplicación de chat que detectará si el destinatario del mensaje está en línea y, si no, cuándo estuvo en línea por última vez. Los datos se almacenarán de la siguiente manera en la base de datos en tiempo real de firebase:
{ lastSeen:[{ [userId]:{ state: boolean time: serverTimeStamp } }] }El problema es que la consola Firebase nunca muestra los datos y solo si el destinatario está en línea, la aplicación muestra estos datos (aunque no esté visible en la consola), pero si el usuario está desconectado, no se devuelve nada ni se genera ningún error. Configuré leer y escribir en verdadero en las reglas de realtimeDB. Aquí está el código que estoy usando:
import database from "@react-native-firebase/database"; export const updateUserLastSeen = (userId) => { const userStatusDatabaseRef = database().ref("/lastSeen/" + userId); console.log("updatelast", userId); userStatusDatabaseRef .set({ state: true, time: database.ServerValue.TIMESTAMP, }) .then(() => console.log("online")) .catch((e) => console.log(e)); // database() // .ref(".info/connected") // .on("value", function (snapshot) { // if (snapshot.val() == false) { // return; // } userStatusDatabaseRef .onDisconnect() .set({ state: false, time: database.ServerValue.TIMESTAMP, }) .then(function () { console.log("disconnect configured"); // userStatusDatabaseRef.set({ // state: true, // time: database.ServerValue.TIMESTAMP, // }); }); // }); }; export const checkUserLastSeen = (userId, setUserLastSeen) => { console.log("check last", userId); database() .ref("/lastSeen/" + userId) .on("value", (snapshot) => { setUserLastSeen(snapshot.val()); console.log("User data: ", snapshot.val()); }); console.log("after check last"); };Probé tanto el código de Firebase docs como el de rnfirebase docs. En el código anterior, ninguna de las funciones "then" o "catch" se llama en updateUserLastSeen, pero en checkUserLastSeen se invoca "on" solo si el portador del ID de usuario está en línea. Además, estoy usando db en tiempo real solo para este propósito y cloud firestore para almacenar otros datos y funciona bien. Cualquier ayuda sería apreciada. Gracias.
Si no se llama ni then ni catch of a write, generalmente significa que el cliente no está conectado al servidor.
Recomiendo verificar para asegurarse de que su aplicación tenga una conexión de red y que haya configurado la URL (correcta) para su base de datos.