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

时间:2012-07-05 19:59:44

标签: firebase

是否有一种策略可以在当前的Firebase产品中运行,以检测服务器连接是否丢失和/或重新获得?

我正在考虑移动设备的一些离线意外事件,我想要一种可靠的方法来确定Firebase数据层何时可用。

6 个答案:

答案 0 :(得分:78)

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

答案 1 :(得分:14)

<强>更新 对于许多与状态相关的功能,客户端可以知道它何时在线或离线。 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");
  }
});

答案 2 :(得分:7)

我想这在过去几个月里发生了变化。目前的说明如下: 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");
  }
});

我承认我不太了解如何设置引用,或者这意味着什么(你是在凭空捏造它们还是必须事先已经创建它们?)或其中哪一个会在服务器上触发某些东西,而不是前端的某些东西,但是当你读到这个时,如果链接仍然是最新的,那么更多的阅读可能有所帮助。

答案 3 :(得分:2)

对于Android,您可以通过名为function getStats() { https.get(https://euw1.api.riotgames.com/lol/summoner/v3/summoners/by-name/yojimbozx?api_key=${API_KEY}, (res) => { let userData = '' res.on('data', (chunk) => { userData += chunk }) res.on('end', () => { userData = JSON.parse(userData) if(!userData.hasOwnProperty('status')) { console.log(userData.name, userData.summonerLevel) return userData } return console.log("Summoner not found") }) }).on("error", (err) => { return console.log("Error: " + err.message) }) }

的单个函数使用户离线

我在我的一个聊天应用中执行了此操作,如果网络连接丢失或用户与互联网断开连接

,用户需要自动离线
onDisconnect()

断开与网络的连接在这里,我在firebase中生成ID为24的用户DatabaseReference presenceRef = FirebaseDatabase.getInstance().getReference("USERS/24/online_status"); presenceRef.onDisconnect().setValue(0); 0。

online_status是离线/在线更新所需值的路径。

您可以在offline capabilities

中阅读相关内容

请注意,firebase需要大约2-10分钟的时间来执行onDisconnect()函数。

答案 4 :(得分:0)

建议的解决方案对我不起作用,因此我决定通过写入和读取“运行状况/检查”值来检查连接。这是代码:

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

enter image description here

答案 5 :(得分:0)

firebase for web

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