recuperar query from datos datasnapshot data consultas firebase

query - Detecta si la conexión de Firebase se pierde/recupera



post firebase (5)

¿Hay alguna estrategia que funcione dentro de la oferta actual de Firebase para detectar si la conexión al servidor se pierde y / o se recupera?

Estoy considerando algunas contingencias sin conexión para dispositivos móviles y me gustaría contar con un medio confiable para determinar cuándo está disponible la capa de datos de Firebase.


Esta es una característica comúnmente solicitada, y acabamos de lanzar una actualización de API para que pueda hacer esto.

var firebaseRef = new Firebase(''http://INSTANCE.firebaseio.com''); firebaseRef.child(''.info/connected'').on(''value'', function(connectedSnap) { if (connectedSnap.val() === true) { /* we''re connected! */ } else { /* we''re disconnected! */ } });

Los documentos completos están disponibles en https://firebase.google.com/docs/database/web/offline-capabilities .


La solución sugerida no funcionó para mí, así que decidí verificar la conexión escribiendo y leyendo el valor de "salud / verificación". Este es el código:

const config = {databaseURL: `https://${projectName.trim()}.firebaseio.com/`}; //if app was already initialised delete it if (firebase.apps.length) { await firebase.app().delete(); } // initialise app let cloud = firebase.initializeApp(config).database(); // checking connection with the app/database let connectionRef = cloud.ref(''health''); connectionRef.set(''check'') .then(() => { return connectionRef.once("value"); }) .then(async (snap) => { if (snap.val() === ''check'') { // clear the check input await connectionRef.remove(); // do smth here becasue it works } });


Para Android, puede desconectar al usuario con solo una función llamada onDisconnect()

Hice esto en una de mis aplicaciones de chat donde el usuario necesita desconectarse automáticamente si la conexión de red se pierde o el usuario se desconecta de Internet

DatabaseReference presenceRef = FirebaseDatabase.getInstance().getReference("USERS/24/online_status"); presenceRef.onDisconnect().setValue(0);

Al desconectarme de la red Aquí estoy haciendo en online_status 0 de usuario cuyo ID es 24 en firebase.

getReference("USERS/24/online_status") es la ruta al valor que necesita actualizar en línea / fuera de línea.

Puede leer sobre esto en capacidades fuera de línea

Tenga en cuenta que firebase demora alrededor de 2-10 minutos para ejecutar la función Desconexión ().


Supongo que esto cambió en los últimos meses. Actualmente, las instrucciones están aquí: https://firebase.google.com/docs/database/web/offline-capabilities

En resumen:

var presenceRef = firebase.database().ref("disconnectmessage"); // Write a string when this client loses connection presenceRef.onDisconnect().set("I disconnected!");

y:

var connectedRef = firebase.database().ref(".info/connected"); connectedRef.on("value", function(snap) { if (snap.val() === true) { alert("connected"); } else { alert("not connected"); } });

Admitiré que no sé mucho sobre cómo se establecen las referencias, o lo que eso significa (¿las estás haciendo de la nada o tienes que haberlas creado previamente?) O cuál de ellas desencadenaría algo en el servidor en lugar de algo en el frente, pero si el enlace aún está actualizado al leer esto, un poco más de lectura podría ayudar.


Actualizado: para muchas funciones relacionadas con la presencia, es útil que un cliente sepa cuándo está en línea o fuera de línea. Los clientes de Firebase Realtime Database proporcionan una ubicación especial en /.info/connected que se actualiza cada vez que cambia el estado de conexión del cliente. Aquí hay un ejemplo:

DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected"); connectedRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot snapshot) { boolean connected = snapshot.getValue(Boolean.class); if (connected) { System.out.println("connected"); } else { System.out.println("not connected"); } } @Override public void onCancelled(DatabaseError error) { System.err.println("Listener was cancelled"); } });