簡體   English   中英

Firebase 離線持久性:是否禁用在線連接?

[英]Firebase offline persistence: Does it disable online connectivity?

看這里: https://firebase.google.com/docs/database/android/offline-capabilities

我使用 Firebase 實時數據庫將谷歌雲后端與 Kotlin 中編寫的 Android 應用程序連接起來。我使用離線持久性。 我注意到一些奇怪的事情:假設我有 2 個端點,ep1 和 ep2。 然后說我在 Android 應用程序中發出這些命令:

Firebase.database.setPersistenceEnabled(true)
FirebaseDatabase.getInstance().reference.child("ep1").keepSynced(true)

然后我觀察到 Android 應用程序看不到對 ep2 的更改。

難道我做錯了什么?

FirebaseDatabase#setPersistenceEnabled(boolean isEnabled)方法:

Firebase 數據庫客戶端將緩存同步數據並跟蹤您在應用程序運行時發起的所有寫入。

這意味着您在離線時執行的所有寫入操作都會添加到本地緩存中的隊列中。 一旦重新連接,所有操作都會與 Firebase 服務器同步。

另一方面,當您使用以下代碼行時:

FirebaseDatabase.getInstance().reference.child("ep1").keepSynced(true)

查詢#keepSynced(boolean keepSynced)方法:

通過在某個位置調用keepSynced(true) ,該位置的數據將自動下載並保持同步,即使沒有偵聽器附加到該位置。

顧名思義,此方法使您的上述引用在本地緩存中保持同步。 它實際上做了什么,它實際上只是將一個空的偵聽器附加到ep1引用。

然后我觀察到 Android 應用程序看不到對 ep2 的更改。

如果沒有附加到ep2引用的偵聽器,或者您沒有調用.keepSynced(true) ,則無法讀取該位置的數據。 這就是為什么你看不到它。 因此,您要么自己在應用程序代碼中附加一個偵聽器,要么像在ep1的情況下那樣調用.keepSynced(true)

但請記住,調用.keepSynced(true)與離線持久化機制無關。 當您調用setPersistenceEnabled()時,這意味着您在調用.keepSynced(true)時啟用/禁用具有本地緩存的選項,它基本上將偵聽器附加到它指向的引用/查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM