在使用 Cloud Firestore 的情境下,難免會有遇到 Client 端網路不穩定的時候,這時候若是因為網路不穩造成使用者體驗不佳而對產品有所怨懟就可惜了,所以我應該善用 Cloud Firestore 的離線資料功能,就讓我們今天來研究這部分吧~
離線資料功能只適用於 Android, iOS 和 Web 的 Apps,也就是客戶端的部分。這個功能會將我們 App 現在有在用的資料從 Cloud Firestore 的伺服器複製一份放在本地端,讓我們的 App 在遇到離線狀況時,仍然可以讀取、寫入資料,只是這些資料是 Cache 在本地端的資料。而等到網路恢復正常時,Cloud Firestore 就會同步本地端的變動到伺服器了。
要使用這個功能不用刻意去改變我們讀寫資料的程式碼,而只是需要在初始化時啟用這個功能,Cloud Firestore 的 Client Library 就會幫我們自動管理資料在連線與離線模式下存取,並協助我們在恢復連線後同步資料。那就讓我來看看怎麼啟用吧!
firebase.initializeApp({
apiKey: '### FIREBASE API KEY ###',
authDomain: '### FIREBASE AUTH DOMAIN ###',
projectId: '### CLOUD FIRESTORE PROJECT ID ###',
})
firebase.firestore().enablePersistence()
.catch(function(err) {
if (err.code == 'failed-precondition') {
// 當使用瀏覽器時,若是開很多分頁同時瀏覽 App,就會出現這個錯誤。
} else if (err.code == 'unimplemented') {
// 當瀏覽器不支援在啟用離線資料功能的所有必要條件時,就會出現這個錯誤。
}
})
事實上,對於 Android 和 iOS App 來說,離線資料的功能已經預設啟用了,不用特別設定。而由於目前離線資料功能在瀏覽器上都還算是實驗性功能,並且不完全支援所有瀏覽器(只支援 Chrome, Safari, and Firefox),也不支援多分頁同時瀏覽,所以才會在上面的範例程式碼去針對這些例外狀況做處理。
另外,假設我們的離線資料包含一些敏感性資訊,記得要去詢問使用者是否能信任他們當前的裝置,若是該裝置是公用的或是不被信任的,建議在得到答覆後把離線資料功能停用比較恰當。