본문 바로가기

카테고리 없음

[Firebase Realtime Database]

공식문서 바로가기

 

Firebase Realtime Database와 app 연결하기

1. Cocoapods 추가

Podfile에 아래 코드 추가

pod 'Firebase/Database'

 

2. 초기화

AppDelegate.swift 파일에 아래 코드 추가

import Firebase

// Use Firebase library to configure APIs
FirebaseApp.configure()

 

3. 데이터베이스 참조 정의

데이터베이스 참조를 만들고 쓰려는 위치에 코드 추가

FIRDatabaseReference instance

var ref: DatabaseReference!
ref = Database.database().reference()

 

데이터 읽고 쓰기

1. 데이터 쓰기

setValue()

데이터 쓰기는 기본적으로 setValue method를 사용한다.

 

self.ref.child("users").child(user.uid).setValue(["username": username])

위 코드는 지정된 위치에서 하위 노드를 포함한 모든 데이터를 덮어쓴다.

 

self.ref.child("users/\(user.uid)/username").setValue(username)

전체 객체를 다시 쓰지 않고 하위 항목을 업데이트하는 방법

 

2. 데이터 읽기

observe()

ref.observe(DataEventType.value) { snapshot in
  // ...
}

 

getData() ???

self.ref.child("users/\(user.uid)/username").getData { (error, snapshot) in
    if let error = error {
        print("Error getting data \(error)")
    }
    else if snapshot.exists() {
        print("Got data \(snapshot.value!)")
    }
    else {
        print("No data available")
    }
}

data를 한번만 불러오는 경우 getData를 사용한다.

 

3. 데이터 삭제

removeValue()

ref.child("user.id").removeValue()

data 삭제는 setValue(nil)과 동일하다. 하지만 기본적으로 제공하는 removeValue() method를 사용한다.

 

4. 데이터 업데이트?

 

(+) 데이터 ID를 모를 때

queryOrdered

ref.queryOrdered(byChild: "id").queryEqual(toValue: cardID).observe(.value) { [weak self] snapshot in
                guard let self = self,
                      let value = snapshot.value as? [String: [String: Any]],
                      let key = value.keys.first else { return }
                self.ref.child(key).removeValue()
            }