什么是“推送和刪除”功能,它是否僅適用于多個設備?
https://firebase.google.com/docs/database/flutter/offline-capabilities#section-sample
Code 1:
final myConnectionsRef =
FirebaseDatabase.instance.ref("users/joe/connections");
final lastOnlineRef =
FirebaseDatabase.instance.ref("users/joe/lastOnline");
final connectedRef = FirebaseDatabase.instance.ref(".info/connected");
connectedRef.onValue.listen((event) {
final connected = event.snapshot.value as bool? ?? false;
if (connected) {
final con = myConnectionsRef.push();
con.onDisconnect().remove();
lastOnlineRef.onDisconnect().set(ServerValue.timestamp);
con.set(true);
}
});
Code 2:
final connectedListRef =
FirebaseDatabase.instance.ref('.info/connected');
final userStatusDatabaseRef =
FirebaseDatabase.instance.ref().child('users/joe');
connectedListRef.onValue.listen((event) {
final connected = event.snapshot.value as bool? ?? false;
if (connected) {
userStatusDatabaseRef
.set({'online': true, 'lastOnline': ServerValue.timestamp});
userStatusDatabaseRef.onDisconnect().set({
'online': false,
'lastOnline': ServerValue.timestamp,
});
}
});
單個設備最終將多次連接到Firebase Realtime Database服務器,這既是初始化過程的一部分,也是連接暫時中斷時(這種情況發生的頻率比您可能意識到的要高得多)。
通過調用
push()
,您可以確保每個這樣的連接都被單獨跟蹤,其中一個的onDisconnect
不會干擾另一個。如果不調用push,流程可能是:onDisconnect
處理程序onDisconnect
處理程序onDisconnect
開火,刪除了在#2和#6中寫入的標記。我希望這個流程能夠澄清為什么每次客戶端連接到數據庫服務器時都需要一個單獨的標記。然后檢測客戶端是否連接的方法是檢查
users/joe/connections
節點下是否有任何節點。