之前有寫過 FirebaseDatabase REST API的文章, 而這篇則會是在 iOS 上的使用。
安裝套件
由於 Google 認為 Carthage 的方式不符合他們的使用模式, 畢竟 Firebase 的 framework 並非是開源的, 所以只有提供 CocoaPods 的安裝方式或是直接下載檔案; 而我這邊就以 CocoaPods 來安裝 Firebase 相關的套件,其他則用 Carthage 來管理。
設定
我們在 Firebase console 那先建立好專案並匯入 GoogleService-Info.plist, 如果你有多個 Target 要使用的話,建議放在不同的資料夾,並且設定好 Target Membership。 並且要注意 Firebase console 內的 Database rules, 若沒有做 auth 相關內容的話,記得要調整; 如我開放給 App 讀取但不可寫入的話:
{
"rules": {
".write": "auth != null",
".read": true
}
}
接著在 AppDelegate.swift 中加入
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
// --**--
}
順道提醒一下,若要讓 Database 的資料在離線也能使用上一次的 cache 的話, 需要在 AppDelegate.swift 裡頭加入
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// --**--
Database.database().isPersistenceEnabled = true
// --**--
}
官方文件中沒有特別註記,但若在其他地方執行這段程式,則會直接報錯。
讀取資料
Firebase Database 所提供的是一個可監聽的資料庫, 來做到 Realtime Database 的效果; Reference 便是 path 的概念, 假設我的資料長這樣:
{
"test": {
"user": {
"name": "Archie"
}
}
}
則 ref 有幾種設法;
- 觀察全部的資料: Database.database().reference.observe
- 只看 test 下的異動: Database.database().reference.child(“test”).observe
- 只看 user:Database.database().reference.child(“test”).child(“user”).observe
隨著資料的結構,我們可以讓每個地方只專注它需要監聽的部分就好。