[UIKit] Firebase Chat App: Facebook Sign In & Sign Out

Junyoung Park·2022년 9월 15일
0

UIKit

목록 보기
33/142
post-thumbnail

Swift: Firebase Chat App Part 6 - Facebook Login & Log Out (Real-time) - Xcode 11 - 2020

Firebase Chat App: Facebook Sign In & Sign Out

구현 목표

  • 페이스북 간편 로그인/로그아웃 구현

구현 태스크

iOS용 Facebook 로그인 - 빠른 시작

  1. 페이스북 개발자 앱 등록
  2. 파이어베이스 인증 - 페이스북 등록
  3. 페이스북 로그인 구현 → 이메일, 이름 정보 → 파이어베이스 실시간 데이터베이스 연동

핵심 코드

    func loginButton(_ loginButton: FBLoginButton, didCompleteWith result: LoginManagerLoginResult?, error: Error?) {
        guard let token = result?.token?.tokenString else {
            print("User failed to log in with facebook")
            return
        }
        
        let facebookRequest = FBSDKLoginKit.GraphRequest(graphPath: "me",
                                                         parameters: ["fields" : "email, name"],
                                                         tokenString: token,
                                                         version: nil, httpMethod: .get)
        // login and get token to get user info
        
        facebookRequest.start { _, result, error in
            guard
                let result = result as? [String : Any],
                error == nil else {
                print("Failed to make facebook graph request")
                return
            }
            guard
                let userName = result["name"] as? String,
                let email = result["email"] as? String else {
                print("Failed to get email and name from fb result")
                return
            }
            
            let nameComponents = userName.components(separatedBy: " ")
            guard nameComponents.count == 2 else {
                return
            }
            let firstName = nameComponents[0]
            let lastName = nameComponents[1]
            
            // from facebook data to firebase database
            DatabaseManager.shared.userExists(with: email) { exists in
                if !exists {
                    DatabaseManager.shared.insertUser(with: ChatAppUser(firstName: firstName, lastName: lastName, emailAddress: email))
                }
            }
            
            // log in and navigate to main view
            let credential = FacebookAuthProvider.credential(withAccessToken: token)
            FirebaseAuth.Auth.auth().signIn(with: credential) { [weak self] result, error in
                guard let self = self else { return }
                guard
                    result != nil,
                    error == nil else {
                    if let error = error {
                        print("Facebook credential login failed, MFA may be needed - \(error)")
                    }
                    return
                }
                print("Successfully logged user in")
                self.navigationController?.dismiss(animated: true, completion: nil)
            }
        }
    }
  • 페이스북 로그인 함수
  • 토큰 생성 → 페이스북 유저 정보 → 파이어베이스 데이터베이스 등록 → 로그인 성공, 뷰 이동

구현 화면

페이스북뿐만 아니라 구글, 애플 등 SNS 간편 로그인 기능은 로그인이 필요한 앱 서비스를 제공하는 데 있어 필수적이다. 파이어베이스와 함께 사용하는 방법 및 간편 로그인 자체의 API 사용법을 확인하자.

profile
JUST DO IT

0개의 댓글