要實作分為兩個部分:
第一部分:為專案加入 Firebase
第二部分:實作 Database 基礎功能
第一部分:
- 先創專案
- 為專案安裝 Firebase,並在專案中實現
- 官方講解如何安裝 Firebase,示範CocoaPods步驟如下
- CocoaPods
- SDK
2.進入你的專案位置
cd 你的專案位置
cd 是進入後面位置的指令
ls 看現在的資料夾底下有什麼(就 ls ,後面不需接其他字)
*可以從 Finder 到專案底下,對檔案按右鍵 -> 取得資訊
把位置直接複製貼上終端機
終端機進入資料夾後:
3.創建 Podfile
已經有就不用創,創過再創一次也不會怎樣
pod init
4. Podfile 這時候會出現在你的專案底下,把下面這行加入你的 Podfile
pod 'Firebase/Core'
我自己多加了 Database 進來,但我沒有試過沒打會怎樣~
5.最後要安裝你的 Podfile裡面的東西
pod install
這時 Firebase 就在你的專案裡了
要開專案要點 . xcworkspace
不是上面的 .xcodeproj
要在專案中實現:
在 AppDelegate.swift 中實現
import Firebase
在application:didFinishLaunchingWithOptions:函式底下
FirebaseApp.configure()
第二部分:
官方的基礎功能文件
Firebase的設定:
!記得要把 Firebase 創出的 GoogleService-Info.plist 放到專案裡
不需登入就開放讀寫權限:
我範例的 JSON 格式:
Get a FIRDatabaseReference
var ref: DatabaseReference!
ref = Database.database().reference()
修改
修改時會先判斷現在資料庫有沒有這個 key 的值,
沒有的話會變成新增,
所以修改可以當新增用。
self.ref.child("users/(user.uid)/username").setValue(username)
更新內容:
let key = ref.child("posts").childByAutoId().key
let post = ["uid": userID,
"author": username,
"title": title,
"body": body]
let childUpdates = ["/posts/\(key)": post,
"/user-posts/\(userID)/\(key)/": post]
ref.updateChildValues(childUpdates)
新增
self.ref.child("users").child(user.uid).setValue(["username": username])
可以把不需要的拿掉,驗證身份、child...等
會把原本其他的全部蓋掉
會把原本其他的全部蓋掉
查詢
let userID = Auth.auth().currentUser?.uidref.child("users").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in
// Get user value
let value = snapshot.value as? NSDictionary
let username = value?["username"] as? String ?? ""
let user = User.init(username: username)
// ...
}) { (error) in
print(error.localizedDescription)
}
取出的是 snapshot
監聽 Database 是否有異動:
監聽 Database 是否有異動:
// Listen for new comments in the Firebase database
commentsRef.observe(.childAdded, with: { (snapshot) -> Void in
self.comments.append(snapshot)
self.tableView.insertRows(at: [IndexPath(row: self.comments.count-1, section: self.kSectionComments)], with: UITableViewRowAnimation.automatic)
})
異動分類:刪除
把值改成 nil 或是 remove 都可以刪除。
DEMO
我的範例專案:Github
0 意見:
張貼留言