Rileva se la connessione Firebase viene persa / recuperata

Esiste una strategia che potrebbe funzionare all’interno dell’attuale offerta di Firebase per rilevare se la connessione al server viene persa e / o recuperata?

Sto prendendo in considerazione alcune contingenze offline per dispositivi mobili e mi piacerebbe un mezzo affidabile per determinare quando il livello dati Firebase è disponibile.

Questa è una caratteristica comunemente richiesta e abbiamo appena rilasciato un aggiornamento API per consentirvi di farlo!

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! */ } }); 

I documenti completi sono disponibili su https://firebase.google.com/docs/database/web/offline-capabilities .

Aggiornato: per molte funzionalità relative alla presenza, è utile che un client sappia quando è online o offline. I client di database in tempo reale di Firebase forniscono una posizione speciale su /.info/connected che viene aggiornata ogni volta che lo stato della connessione del client cambia. Ecco un esempio:

 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"); } }); 

Immagino che sia cambiato negli ultimi due mesi. Attualmente le istruzioni sono qui: https://firebase.google.com/docs/database/web/offline-capabilities

In sum:

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

e:

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

Devo ammettere che non so molto su come sono impostati i riferimenti, o che cosa significhi (li stai facendo uscire dal nulla o devi averli già creati in precedenza?) O quale di questi potrebbe innescare qualcosa sul server invece di qualcosa sul front-end, ma se il collegamento è ancora attuale quando leggi questo, potrebbe essere utile un po ‘più di lettura.

Per Android puoi rendere l’utente offline solo con una singola funzione chiamata onDisconnect()

L’ho fatto in una delle mie app di chat in cui l’utente deve disconnettersi automaticamente se la connessione di rete viene persa o l’utente disconnesso da Internet

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

Disconnessione dalla rete Qui sto facendo online_status 0 di utente il cui ID è 24 in firebase.

getReference("USERS/24/online_status") è il percorso del valore che devi aggiornare offline / online.

Puoi leggere a riguardo nelle funzionalità offline

Tieni presente che Firebase richiede circa 2-10 minuti per eseguire la funzione onDisconnect ().

La soluzione suggerita non ha funzionato per me, quindi ho deciso di verificare la connessione scrivendo e leggendo il valore ‘salute / controllo’. Questo è il codice:

 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 } }); 

inserisci la descrizione dell'immagine qui