FireabseDatabase - Read

之前有寫過 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

隨著資料的結構,我們可以讓每個地方只專注它需要監聽的部分就好。

comments powered by Disqus