Written by
Amy
on
on
Firebase 서버 연동하기
- 파이어베이스 특강 : 2017년 11월 18일 토요일 10시 (장인수님)
- 공식 홈페이지 문서 iOS 가이드 확인하기: Firebase
파이어베이스
- 클라우드 서비스 제공자이며 동시에 backend 기능을 가지고 있다. (Google이 인수)
- 네트워크 트래픽 양이 5GB 이상이면 유료이나, 초기 가입시 300 크레딧 제공
✔️ 핵심: Realtime Database = Data Sync
- 연결된 모든 클라이언트에서 실시간으로 데이터 저장 및 동기화(자동)
- 제공 기능: insert, delete, select
- Realtime DB : RDB와 같은 테이블 구조 형태가 아닌 Key&Value의 도큐멘트 디렉토리 형태, 트리 형태 (JSON 구조)
✔️ Storage
✔️ Authentication
✔️ FCM: Firebase Cloud Message
- 20줄 내외의 코드로 푸시 메시지 전송 가능
- Google -> APNS(Apple Notification Service) -> Device
✔️ Crash report
Podfile
pod 'Firebase/Core'
pod 'Firebase/Auth'
pod 'Firebase/Database'
pod 'Firebase/Storage'
ref.observe 기본 메소드
var ref: DatabaseReference!
override func viewDidLoad() {
super.viewDidLoad()
// FB의 최상위 노드
ref = Database.database().reference()
// 원하는 곳을 observing 하는 개념으로 realtime db 실현
ref.observe(DataEventType.childAdded) { (DataSnapshot) in
print("Item Addeds")
}
ref.observe(DataEventType.childRemoved) { (DataSnapshot) in
print("Item Removed Key: ")
print("Item Removed Value: ")
}
ref.observe(.childChanged) { (snapshot) in
dump(snapshot.value)
}
}
응용
- Storage에 이미지 업로드 후, 콜백으로 오는 metadata의 url을 받아, realtime DB에 다시 dictionary 형태로 저장
var currentUser: UserModel!
var uid: String {
return currentUser.uid
}
private init() {
Auth.auth().addStateDidChangeListener { [weak self] (auth, user) in
if let user = user {
self?.currentUser = UserModel(uid: user.uid)
}
}
}
func uploadImg(selectedImgData : Data) {
let filename = NSUUID().uuidString
Storage.storage().reference().child("profile_imgs").child(filename).putData(selectedImgData, metadata: nil) { (metadata, error) in
guard let profileImgUrl = metadata?.downloadURL()?.absoluteString else {return}
let dic = ["profile_img_url" : profileImgUrl]
Database.database().reference().child(self.uid).updateChildValues(dic, withCompletionBlock: { (error, ref) in
if error == nil {
print("uploadImg 성공")
}else {
print(error!.localizedDescription)
}
})
}
}