我知道Firebase实时数据库提供离线支持,但如何区分在线连接提供的数据或本地离线更改?
Firebase数据库提供了一种特定的方法来判断客户端是否已连接。
谷歌就这个主题写了一份方便的文档。
从提供的链接:
检测连接状态
对于许多与状态相关的功能,客户端知道它是在线还是离线是很有用的。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。在安卓系统上,Firebase会自动管理连接状态,以减少带宽和电池使用量。当客户端没有活动侦听器,没有挂起的写入或
onDisconnect
操作,并且没有通过goOffline
方法显式断开连接时,Firebase会在60秒的非活动状态后关闭连接。
了解您的客户端是否连接到数据库将有助于区分在线存储和离线存储提供的数据。我确信没有特定的方法可以查看DataSnapshot
是来自在线数据还是离线数据。