Firebase数据库区分在线和离线数据

时间:2017-01-10 07:11:45

标签: firebase firebase-realtime-database

我知道Firebase实时数据库提供离线支持,但如何区分在线连接或本地离线更改提供的数据?

1 个答案:

答案 0 :(得分:2)

Firebase数据库提供了一种了解客户端是否已连接的特定方法。

Google在该主题上写了一篇方便的documentation

从提供的链接:

  

检测连接状态

     

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

/.info/connected是一个布尔值,在客户端之间不同步,因为该值取决于客户端的状态。换句话说,如果一个客户端将/.info/connected读为false,则无法保证单独的客户端也会读取false。

     

在Android上,Firebase会自动管理连接状态,以减少带宽和电池使用量。如果客户端没有活动的侦听器,没有挂起的写入或onDisconnect操作,并且goOffline方法未明确断开连接,则Firebase会在60秒不活动后关闭连接。

了解您的客户端是否已连接到数据库有助于区分在线和离线存储提供的数据。我很确定没有具体方法可以查看DataSnapshot是否来自在线或离线数据。