检测Firebase连接是否丢失/重新获得

问题描述:

在当前的Firebase产品中是否存在可检测服务器连接是否丢失和/或重新获得的策略?检测Firebase连接是否丢失/重新获得

我正在考虑一些移动设备的离线意外情况,我希望有一个可靠的方法来确定Firebase数据层何时可用。

这是一个常用的功能,我们刚刚发布了一个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

更新: 对于许多与在场相关的功能,它对于客户知道它何时在线或离线很有用。 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

我想这在过去几个月发生了变化。目前,该指令是在这里: 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

为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()函数。