Firebase Model Framework Salada를 사용하여 사용자 모델 만들기
Firebase Model Framework Salada를 사용하여 사용자 모델 만들기
저는 Firebase에 대해 실천적인 내용을 보도하지 않고 평소에 제가 응용 프로그램에서 사용하는 사용자 모델을 소개하고 싶습니다.
이 문장 소개
Salada 설치
드디어 Salada Cococapods에 대응했다.
설치할 때pod1.4 이상을 사용해야 합니다.
우리 먼저 코코아팟을 업데이트합시다.
$ gem install cocoapods --pre
그리고 평소처럼 Podfile에 이걸 쓰세요.
pod 'Salada'
설치 완료!각 문서가 어떤 역할을 하는지 자세히 물어보고 싶은 사람Twiiter에게 Qiita에게 물어보세요.나는 기꺼이 대답한다.
Firebase로 사용자 모형 만들기
우리 바로 사용자 모형을 만들자.
User.swift
도 괜찮지만 Realm에서 같은 사용자 모델을 만들 때 이름이 충돌하는 것을 싫어하기 때문에 그 이후로 저는 Firebase+User.swift
가 되었습니다.Firebase Auth도 User
로 정의된 반이 있기 때문에 그에게 이름 공간을 주는 것이 가장 좋다.이번에는 간단하지만 사용하기 좋은 구성을 소개합니다.
import Firebase
extension Firebase {
class User: Object {
@objc dynamic var name: String?
@objc dynamic var thumbnailImage: File?
let followers: Follower = []
let friends: Friend = []
}
}
사용자 이름, 축소판 그림 및 추적 기능을 제공합니다.File
FirebaseStorage와 원활하게 협업할 수 있습니다.extension Firebase.User {
static func current(_ completionHandler: @escaping ((Firebase.User?) -> Void)) {
guard let user: User = Auth.auth().currentUser else {
completionHandler(nil)
return
}
Firebase.User.observeSingle(user.uid, eventType: .value, block: { (user) in
guard let user: Firebase.User = user else {
// FirebaseのDBにUserが保存されていない場合はログアウトする
_ = try? Auth.auth().signOut()
completionHandler(nil)
return
}
completionHandler(user)
})
}
// ユーザーをフォローする
public func follow() {
Firebase.User.current { (me) in
guard let me = me else { return }
self.followers.insert(me)
me.friends.insert(self)
}
}
// ユーザーをフォローをやめる
public func unfollow() {
Firebase.User.current { (me) in
guard let me = me else { return }
self.followers.remove(me)
me.friends.remove(self)
}
}
}
Relation 클래스를 상속하면 참조를 쉽게 생성할 수 있습니다.extension Firebase {
// フォローしている
class Follower: Relation<Firebase.User> {
}
}
extension Firebase {
// フォローされている
class Friend: Relation<Firebase.User> {
}
}
사용자 저장
let user: Firebase.User = Firebase.User()
user.name = "hoge"
user.thumbnailImage = File(data: UIImageJPEGRepresentation(image, 1))
user.save()
사용자 액세스
Firebase.User.current { user in
// Do something
}
다른 사용자 액세스
Firebase.User.observeSingle("id", eventType: .value) { (user) in
// Do something
}
속성 업데이트
Firebase.User.current { user in
user.name = "Update"
}
Salada는 업데이트 기능을 제공하지 않습니다.이제 속성을 모니터링하고 값을 설정할 때 실시간으로 Firebase에 저장할 수 있습니다.
그러니까 새 값만 설정해줄게.왜 이렇게 됐는지 말하자면 Firebase가 오프라인에서도 사용할 수 있기 때문이다.
오프라인일 때 오류를 처리할 필요가 없습니다.원래 Firebase는 시간을 초과하는 개념도 없고 오류를 되돌려주지도 않았다.오프라인이면 로컬에 잠시 저장되고 네트워크에 다시 연결할 때 Firebase 호스트와 동기화됩니다.
Firebase Auth를 사용자 모델과 공동 작업
실제로 이것은 상당히 번거롭다. Firebase Auth는 인증이 끝난 후에
AuthStateDidChange
같은 Notification을 건너뛰지만, 실제로 원하는 Notification은 인증이 끝난 후에 사용자가 만든 후에 더욱 즐겁다.Auth.auth().signIn(with: credential) { (authUser, error) in
guard let authUser = authUser else {
print(error)
return
}
// AuthStateDidChangeはこの時点で飛んじゃう。
Firebase.User.observeSingle(authUser.uid, eventType: .value) { user in
if let user = user {
// すでにユーザーがある場合はそのままログイン
} else {
// ない場合はユーザーを作る
let newUser: Firebase.User = Firebase.User(id: authUser.uid)!
newUser.name = authUser.displayName
newUser.save { (_, error) in
if let _ = error {
print(error)
return
}
// ここで自前のNotificationを飛ばしましょう。
}
}
}
}
그럼 좋은 Firebase Life 하나 보내주세요.
Reference
이 문제에 관하여(Firebase Model Framework Salada를 사용하여 사용자 모델 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/1amageek/items/4fbba1b22e81b650d656텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)