Mendeteksi jika Firebase koneksi hilang/kembali

Apakah ada strategi yang akan bekerja dalam saat Firebase menawarkan untuk mendeteksi jika server koneksi hilang dan/atau kembali?

I'm mengingat beberapa offline kontinjensi untuk perangkat mobile dan saya ingin cara yang dapat diandalkan untuk menentukan kapan Firebase lapisan data yang tersedia.

Larutan

Ini adalah fitur yang sering diminta, dan kami baru saja merilis sebuah update API untuk membiarkan anda melakukan hal ini!

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

Penuh dokumen yang tersedia di https://firebase.google.com/docs/database/web/offline-capabilities.

Komentar (8)

Diperbarui: Selama bertahun-kehadiran-fitur terkait, hal ini berguna untuk klien untuk tahu kapan itu online atau offline. Firebase Realtime Database klien menyediakan lokasi khusus pada /.info/terhubung yang diperbarui setiap kali klien's sambungan negara perubahan. Berikut ini sebuah contoh:

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

Saya kira ini berubah dalam beberapa bulan terakhir. Saat ini petunjuk di sini: https://firebase.google.com/docs/database/web/offline-capabilities

Dalam penjumlahan:

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

dan:

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

I'll mengakui bahwa aku don't tahu banyak tentang bagaimana referensi yang ditetapkan, atau apa yang berarti (anda membuat mereka keluar dari udara tipis atau apakah anda harus telah membuat mereka sebelumnya?) atau yang salah satu dari mereka akan memicu sesuatu pada server sebagai lawan dari sesuatu di ujung depan, tetapi jika link masih saat ini ketika anda membaca ini, sedikit lebih banyak membaca mungkin bisa membantu.

Komentar (4)

Untuk android anda dapat membuat pengguna offline dengan hanya satu fungsi yang disebut onDisconnect()

Saya lakukan ini sebagai salah satu aplikasi chat di mana kebutuhan pengguna untuk mendapatkan offline secara otomatis jika koneksi jaringan hilang atau pengguna terputus dari Internet

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

presenceRef.onDisconnect().setValue(0);

Pada terputus dari jaringan di Sini saya membuat online_status 0 pengguna yang memiliki Id 24 di firebase.

getReference("PENGGUNA/24/online_status") adalah path ke nilai yang anda butuhkan untuk update secara offline/online.

Anda dapat membaca tentang hal itu di offline kemampuan

Perhatikan bahwa firebase membutuhkan waktu sekitar 2-10 menit untuk mengeksekusi onDisconnect() fungsi.

Komentar (6)

Solusi yang disarankan didn't bekerja untuk saya, jadi saya memutuskan untuk memeriksa koneksi dengan menulis dan membaca 'kesehatan/check' nilai. Ini adalah kode:

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

Komentar (0)

firebase untuk web

firebase.database().ref(".info/connected").on("value",(snap)=> {});
Komentar (0)