2012-07-05 19 views
44

¿Existe 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?Detecta si se pierde/recupera la conexión de Firebase

Estoy considerando algunas contingencias fuera de línea para dispositivos móviles y me gustaría un medio confiable para determinar cuándo está disponible la capa de datos de Firebase.

Respuesta

64

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

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.

+2

Michael, muchas gracias. Tus equipos siempre parecen estar un paso adelante. – Kato

+1

Otro problema es cuando realmente desea que la conexión permanezca activa, pero sus servidores se apagan ... y en lugar de intentar solicitar una nueva conexión, simplemente intenta volver a conectarse repetidamente al servidor "inactivo". :( –

+0

Caso de ejemplo: http://screencast.com/t/ByFTXdJP6c –

11

Actualizado: Para muchas características 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í está 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"); 
    } 
}); 
+0

Hola, he estado intentando agregar Firebase a mi proyecto y siempre obtengo el "no conectado". ¿Alguna idea de lo que podría estar mal? –

+0

Lo mismo aquí. Alguna sugerencia ? –

+0

Esto es para Android plataforma –

3

supongo que esto cambió en el último par de 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"); 
    } 
}); 

Admito que no sé mucho acerca de cómo se establecen las referencias, o lo eso significa (¿los estás creando de la nada o tienes que haberlos creado previamente?) o cuál de ellos desencadenaría algo en el servidor en lugar de algo en el frente, pero si el enlace sigue siendo actual. cuando lees esto, un un poco más de lectura podría ayudar.

+0

Firebase es un almacén de datos NoSQL JSON, por lo que no tiene esquema. Por lo tanto, puedes elegirlos de la nada, establecer un valor, y luego existen:) – Kato

+0

Para ser honesto ... me tomó bastante tiempo para entender NoSQL después de 8 años de SQL solamente ... pero es realmente increíble. – Eduard

1

para Android que puede hacer el usuario en línea con sólo una única función llamada onDisconnect()

hice esto en uno de mis aplicación de chat donde el usuario necesita para obtener en línea de forma automática si conexión de red perdida o usuario desconectado de internet

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

presenceRef.onDisconnect().setValue(0); 

en desconectarse de la red Aquí estoy haciendo online_status 0 de usuario cuyo ID es 24 en base de fuego.

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

Usted puede leer sobre él en offline capabilities

Tenga en cuenta que lleva tiempo base de fuego alrededor de 2-10 minutos para ejecutar la función OnDisconnect().

Cuestiones relacionadas