2012-07-05 62 views
44

在當前的Firebase產品中是否存在可檢測服務器連接是否丟失和/或重新獲得的策略?檢測Firebase連接是否丟失/重新獲得

我正在考慮一些移動設備的離線意外情況,我希望有一個可靠的方法來確定Firebase數據層何時可用。

回答

64

這是一個常用的功能,我們剛剛發佈了一個API更新,讓你這樣做!

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

完整的文檔可在https://firebase.google.com/docs/database/web/offline-capabilities

+2

邁克爾,非常感謝。你的團隊似乎總是領先一步。 – Kato 2012-07-05 20:25:01

+1

另一個問題是,當你真的想要連接保持連接,但你的服務器關閉了,而不是試圖請求一個新的連接,它只是反覆嘗試重新連接到'下'服務器。 :( – 2013-09-11 19:55:27

+0

案例:http://screencast.com/t/ByFTXdJP6c – 2013-09-25 15:45:03

11

更新: 對於許多與在場相關的功能,它對於客戶知道它何時在線或離線很有用。 Firebase實時數據庫客戶端在/.info/connected中提供了一個特殊位置,每當客戶端的連接狀態發生更改時,該位置都會更新。這裏是一個例子:

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

您好,我一直在嘗試將Firebase添加到我的項目中,並且始終獲得「未連接」。任何想法可能是錯誤的? – 2017-01-17 10:08:51

+0

同樣在這裏。有什麼建議麼 ? – 2017-04-20 06:04:49

+0

這是對於Android平臺 – 2017-08-08 15:05:41

3

我想這在過去幾個月發生了變化。目前,該指令是在這裏: https://firebase.google.com/docs/database/web/offline-capabilities

在求和:

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

和:

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

我承認我不知道了很多關於引用是如何設置,還是什麼這意味着(你是讓他們變得無所事事,還是必須事先創建它們?)或者其中哪一個會觸發服務器上的某些內容,而不是前端上的某些內容,但是如果鏈接仍然是最新的當你讀到這個,一個閱讀可能會有所幫助。

+0

Firebase是NoSQL JSON數據存儲,因此它沒有模式。因此,你可以憑空選擇它們,設定一個值,然後它們就會存在:) – Kato 2016-11-16 15:03:07

+0

說實話...在8年的SQL之後,我花了相當長的時間纔將自己的頭圍繞NoSQL ...但確實很棒。 – Eduard 2017-02-25 20:27:57

1

爲Android則只需稱爲單一的功能使用戶下線onDisconnect()

我在用戶需要下線,如果自動網絡連接丟失或用戶從Internet斷開我的聊天應用程序的一個這樣做

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

presenceRef.onDisconnect().setValue(0); 

在從網絡中斷開這裏我做一個ID爲在火力24的用戶online_status 0。

getReference("USERS/24/online_status")是您需要在離線/在線更新值的路徑。

可以在offline capabilities

注意瞭解它是火力點需要時間周圍2-10分鐘來執行onDisconnect()函數。

相關問題