[Swift판] 이제 들리지 않는 Firebase④ Realtime Database
소개
지금 들을 수 없는 Firebase 시리즈 제4탄은 Realtime Database의 구현 방법에 대해 소개합니다.
Realtime Database가 할 수 있는 일
· 스토리지에서 데이터 관리 (JSON Tree)
・실시간으로 데이터를 갱신할 수 있다(수밀리초 정도)
・오프라인에서도 이용 가능
설명하는 예
이번에는 제목과 완료된 플래그를 관리하는 예에서 설명합니다.
ToDo.swiftimport Foundation
class ToDo: NSObject {
var title = ""
var isDone = false
init(title: String, isDone: Bool) {
self.title = title
self.isDone = isDone
}
}
스토리지에서는 다음과 같이 관리되는 가정입니다.
(Firebase의 Database는 하나의 큰 JSON Tree로 관리되는 것 같습니다)
키 이름
설명
보충
realtimedatabase-d0734
데이터베이스 이름
자동으로 할당
user-todolist
테이블 이름
7y5Cqzcnj7Ztrn408qLPqvuqWlp1
사용자 ID
FIRAuth.auth()?.currentUser?.uid
KOSR7Jx7RknVe3LAxyT
기본 키
자동으로 할당
title
이번에 등록할 데이터
문자열
isDone
이번에 등록할 데이터
Bool
할 일
· Realtime Database의 도입 방법에 대해서
· 데이터 등록, 데이터 읽기 샘플 코드 소개
하지 않는 것
· Firebase 배포 정보
· 회원 등록, 로그인에 대해
막상 도전!
1. 도입 방법
1.1. Podfile에 모듈 추가
또한 Auth는 사용자별로 데이터를 관리하는 데 사용합니다.
Podfile pod 'Firebase'
pod 'Firebase/Auth'
pod 'Firebase/Database'
2. 구현
2.1. Firebase 모듈 가져오기
Realtime Database를 사용하는 클래스에서 import
import Firebase
import FirebaseDatabase
2.2. 데이터 등록
데이터 등록은 저장하려는 계층까지 슬래시로 구분하여 지정합니다.
userID는 로그인시 얻은 uid를 지정합니다.
ViewController.swift private func addToDoItem(userID: String, todo: ToDo) {
let ref = FIRDatabase.database().reference()
let key = ref.child("todolist").childByAutoId().key
let childUpdates = ["/user-todolist/\(userID)/\(key)/": ["title": todo.title, "isDone" : todo.isDone]]
ref.updateChildValues(childUpdates)
}
2.3. 데이터 읽기
데이터 읽기는 비동기 적으로 검색되므로 대리자를 정의합니다.
ViewController.swiftprotocol ToDoImtesInput {
func success(todoItems: [ToDo])
func failure(error: NSError)
}
사용자 ID별로 데이터를 읽고, 읽기 완료 후 델리게이드로 통지
ViewController.swift private func loadTodoItems(userID: String){
let ref = FIRDatabase.database().reference()
ref.child("user-todolist").child(userID).observeSingleEventOfType(.Value, withBlock: {[weak self] (snapshot) in
guard let weakSelf = self else { return }
var todoItems = [ToDo]()
for item in snapshot.children {
let child = item as! FIRDataSnapshot
let dic = child.value as! NSDictionary
todoItems.append(ToDo(title: dic["title"] as! String, isDone: dic["isDone"] as! Bool))
}
weakSelf.success(todoItems)
}) {[weak self] (error) in
guard let weakSelf = self else { return }
weakSelf.failure(error)
}
}
읽은 데이터 표시
ViewController.swiftextension ViewController: ToDoImtesInput {
func success(todoItems: [ToDo]) {
for todoItem in todoItems {
print(todoItem.title, todoItem.isDone)
}
}
func failure(error: NSError) {
print(error.description)
}
}
요약
이번에는 Realtime Database의 구현 방법에 대해 소개했습니다.
스토리지로 관리하는 데이터는, 그 밖에도 룰 설정을 할 수 있어 액세스 제한등을 할 수 있는 것 같습니다.
앞으로는 여러 테이블의 예도 모아보고 싶습니다.
Reference
이 문제에 관하여([Swift판] 이제 들리지 않는 Firebase④ Realtime Database), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/eKushida/items/87e3f50d7e637ebf3d03
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import Foundation
class ToDo: NSObject {
var title = ""
var isDone = false
init(title: String, isDone: Bool) {
self.title = title
self.isDone = isDone
}
}
1. 도입 방법
1.1. Podfile에 모듈 추가
또한 Auth는 사용자별로 데이터를 관리하는 데 사용합니다.
Podfile
pod 'Firebase'
pod 'Firebase/Auth'
pod 'Firebase/Database'
2. 구현
2.1. Firebase 모듈 가져오기
Realtime Database를 사용하는 클래스에서 import
import Firebase
import FirebaseDatabase
2.2. 데이터 등록
데이터 등록은 저장하려는 계층까지 슬래시로 구분하여 지정합니다.
userID는 로그인시 얻은 uid를 지정합니다.
ViewController.swift
private func addToDoItem(userID: String, todo: ToDo) {
let ref = FIRDatabase.database().reference()
let key = ref.child("todolist").childByAutoId().key
let childUpdates = ["/user-todolist/\(userID)/\(key)/": ["title": todo.title, "isDone" : todo.isDone]]
ref.updateChildValues(childUpdates)
}
2.3. 데이터 읽기
데이터 읽기는 비동기 적으로 검색되므로 대리자를 정의합니다.
ViewController.swift
protocol ToDoImtesInput {
func success(todoItems: [ToDo])
func failure(error: NSError)
}
사용자 ID별로 데이터를 읽고, 읽기 완료 후 델리게이드로 통지
ViewController.swift
private func loadTodoItems(userID: String){
let ref = FIRDatabase.database().reference()
ref.child("user-todolist").child(userID).observeSingleEventOfType(.Value, withBlock: {[weak self] (snapshot) in
guard let weakSelf = self else { return }
var todoItems = [ToDo]()
for item in snapshot.children {
let child = item as! FIRDataSnapshot
let dic = child.value as! NSDictionary
todoItems.append(ToDo(title: dic["title"] as! String, isDone: dic["isDone"] as! Bool))
}
weakSelf.success(todoItems)
}) {[weak self] (error) in
guard let weakSelf = self else { return }
weakSelf.failure(error)
}
}
읽은 데이터 표시
ViewController.swift
extension ViewController: ToDoImtesInput {
func success(todoItems: [ToDo]) {
for todoItem in todoItems {
print(todoItem.title, todoItem.isDone)
}
}
func failure(error: NSError) {
print(error.description)
}
}
요약
이번에는 Realtime Database의 구현 방법에 대해 소개했습니다.
스토리지로 관리하는 데이터는, 그 밖에도 룰 설정을 할 수 있어 액세스 제한등을 할 수 있는 것 같습니다.
앞으로는 여러 테이블의 예도 모아보고 싶습니다.
Reference
이 문제에 관하여([Swift판] 이제 들리지 않는 Firebase④ Realtime Database), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/eKushida/items/87e3f50d7e637ebf3d03
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([Swift판] 이제 들리지 않는 Firebase④ Realtime Database), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/eKushida/items/87e3f50d7e637ebf3d03텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)