[SwiftUI Firebase] Firestore UserProfiles

Woozoo·2023년 4월 6일

[SwiftUI Firebase]

목록 보기
6/14

방금 전까지는 데이터를 콘솔에서 직접 입력해줬는데
지금부턴 코드로 입력될 수 있게 해줍시다


FireStore랑 FireStoreSwift 패키지 추가해주고


프로필뷰를 만들어줌

그리고 로그인하면 프로필뷰가 뜨고, 네비게이션 바로 Settings View로 넘어가게 해줌!

(이거 처음 구조바꿨을 때 계속 SettingsView가 먼저 떴는데 여러번 시뮬레이터 돌리다보니까 ProfileView가 먼저 뜨게 바뀜


이제 해줘야할 건 로그인을 하고 나면 프로필 데이터가 데이터베이스에 저장 되야함

뷰모델에서 signIn할 때 처리를 해주면 될 거 같은데!!
이 로직을 처리해줄 UserManager를 따로 파줍시다

import Foundation
import FirebaseFirestore
import FirebaseFirestoreSwift

final class UserManager {
    
    static let shared = UserManager()
    private init() { }
    
    func createNewUser(auth: AuthDataResultModel) async throws {
        var userData: [String: Any] = [
            "user_id" : auth.uid,
            "is_anonymous" : auth.isAnonymous,
            "date_created" : Timestamp(), //Date() is Possible but Firebase's Timestap is more general
        ]
        if let email = auth.email {
            userData["email"] = email
        }
        if let photoURL = auth.photoUrl {
            userData["photo_url"] = photoURL
        }
        
        try await Firestore.firestore().collection("users").document(auth.uid).setData(userData, merge: false)
    }
    
}

AuthDataResultModel에서 옵셔널한 데이터는 아래처럼 if let 으로 감싼다음에 키값을 가지고 userData에 넣어주면됨


뷰모델로 돌아와서 signIn 메소드에 방금 작성한 메소드 추가!


오케이~! 콜렉션 추가 잘 됩니다


getUser하기

프로필 뷰모델의 load도 바꿔주면서 유저 정보들을 get할 수 있게 되었습니다

profile
우주형

0개의 댓글