[UIKit] Firebase Chat App: Database Set Up

Junyoung Park·2022년 9월 15일
0

UIKit

목록 보기
32/142
post-thumbnail
post-custom-banner

Swift: Firebase Chat App Part 5 - Database Set Up (Real-time) - Xcode 11 - 2022

Firebase Chat App: Database Set Up

구현 목표

  • 파이어베이스 인증 / 데이터베이스

구현 태스크

  1. 파이어베이스 실시간 데이터베이스 연결
  2. 파이어베이스 데이터 서비스 클래스
  3. 회원가입 → (1). 중복 아이디 확인 (2). 데이터베이스 저장

핵심 코드

import Foundation
import FirebaseDatabase

final class DatabaseManager {
    
    static let shared = DatabaseManager()
    private let database = Database.database().reference()
    
    private init() {}
}

// Account Management

extension DatabaseManager {
    
    func userExists(with email: String,
                    completionHandler: @escaping ((Bool) -> Void)) {
        database.child(email.convertedPath).observeSingleEvent(of: .value, with: { snapshot in
            guard snapshot.value as? String != nil else {
                completionHandler(false)
                return
            }
            completionHandler(true)
        })
    }
    
    /// Inserts new user to database
    func insertUser(with user: ChatAppUser) {
        database.child(user.emailAddress.convertedPath).setValue([
            "first_name" : user.firstName,
            "last_name" : user.lastName,
        ])
    }
}
  • 파이어베이스 데이터 베이스 담당 서비스 클래스
  • 싱글턴 패턴 구현
  • 기존 유저 이메일 중복 확인
  • 데이터베이스 회원 정보 등록
        DatabaseManager.shared.userExists(with: email) { exists in
            guard !exists else {
                // user already exists
                DispatchQueue.main.async { [weak self] in
                    guard let self = self else { return }
                    self.alertUserLoginError("Id already exists")
                }
                return
            }
        }
  • 중복 시 얼러트 화면
        FirebaseAuth.Auth.auth().createUser(withEmail: email, password: password) { [weak self] result, error in
            guard
                let self = self,
                let _ = result,
                error == nil else {
                return
            }
            DatabaseManager.shared.insertUser(with: ChatAppUser(firstName: firstName, lastName: lastName, emailAddress: email))
            self.navigationController?.dismiss(animated: true)
        }
  • 유저 데이터 생성 후 회원가입 등록

구현 화면

profile
JUST DO IT
post-custom-banner

0개의 댓글