본문 바로가기

✏️/iOS&Swift

[iOS] 내 프로젝트에 파이어베이스를 이용해서 구글로그인 붙이기 (GoogleSignIn v. 6.xx)

728x90

Demo

 

오늘은 구글 로그인 연결과 관련해서 만들어본 내용을 정리해본다.

(서버 없이) 파이어베이스를 이용해서 구글 로그인을 하고자 한다면, 
파이어베이스 콘솔을 등록하고, 1. GoogleService-Info.plist 파일 추가2.Authentication 탭에서 구글을 활성화  3. 프로젝트에 구글 로그인 설치를 해야한다.

콘솔 등록을 완료하면, plist 파일을 다운 받을 수 있다. 이 파일은 프로젝트의 상단에 위치시켜주자.

그나저나 xcode 업데이트 되어서 아이콘이 너무 이쁘다ㅋㅋㅋ

 

파일 업로드를 완료하였으면, REVERSED_CLIENT_ID 값을 URL Type schema 에 붙여넣어주자.
이 작업은, 구글이 권한을 위임할 앱을 구분하기 위해서 설정해주는 작업으로 각 앱 서비스(e.x. 페이스북, 트위터 등)마다 모든 다른 값을 가지고 있다.

 

그리고, 다시 파이어베이스 콘솔로 돌아가 설정하면 기본 셋팅은 어느정도 끝난다.

 

파이어베이스를 통해 인증을 구현할 경우 다음과 같은 특징을 가질 수 있다.

  • SignIn 기능을 쉽게 제공 
    • dependency를 통해 쉽게 설치 및 구현 가능!!
  • OAuth 2.0 / Open ID Connect 등의 업계 표준 활용, 삽입형 인증 솔루션 제공
  • 다양한 인증방식 제공 : 이메일/비번, ID 공급업체(facebook .. ), 전화번호, 커스텀인증, 익명인증
  • 별도의 backend 개발 없이 인증 서비스 제공
    • serverless framework

 

그럼 이제 내 프로젝트로 다시 돌아와  파이어베이스와 구글 로그인을 설치해주자. 코코아팟부터 천천히 설치하면 된다.

 pod 'Firebase/Auth'
 pod 'GoogleSignIn'

 

AppDelegate.swift

델리게이트 설정을 해준다. 파이어베이스를 넣어주고, 구글 로그인 관련 핸들러를 설정해준다.

이 작업은, 앱이 시작될 때 파이어베이스도 함께 연결이 될 수 있도록 해주고 인증 과정에서 구글 로그인 요청이 왔을 때 설정해주는 부분이다.

import Firebase
import GoogleSignIn

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        FirebaseApp.configure()
        
        return true
    }

    // google login handler
    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        var handled: Bool

          handled = GIDSignIn.sharedInstance.handle(url)
          if handled {
            return true
          }

          return false
    }
    
    ..
 }

 

 

GoogleSignIn 라이브러리를 설치하면, 사실 구글이 이쁜 로그인 버튼을 제공한다. (문서)

이 버튼을 사용해서 구현할 경우, 쉽게 인증 정보를 전달 할 수 있다.

하지만, 나의 경우 그냥 내가 만든 버튼에 로그인을 하고 싶어서... (내 기준 안이뻐서..ㅋㅋㅋ) googleLoginButton을 하나 만들어주고, 다음과 같이 작업 하였다. 

    @IBAction func tapGoogleLoginButton(sender: Any) {
        guard let clientID = FirebaseApp.app()?.options.clientID else { return }
        let signInConfig = GIDConfiguration.init(clientID: clientID)
        
      GIDSignIn.sharedInstance.signIn(with: signInConfig, presenting: self) { user, error in
        guard error == nil else { return }

        guard let authentication = user?.authentication else { return }
        let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken!, accessToken: authentication.accessToken)
        // access token 부여 받음
        
        // 파베 인증정보 등록
        Auth.auth().signIn(with: credential) {_,_ in
            // token을 넘겨주면, 성공했는지 안했는지에 대한 result값과 error값을 넘겨줌
            self.showMainViewController()
        }
      }
    }

 

코드 한 줄씩 이해해보면 다음과 같다.

1. 파이어베이스의 인증 정보를 가져와
2. 구글 로그인을 시도하기 위해 셋팅해준다.
3. 구글 로그인을 시도하는데, 시도 결과에 따라 각각 처리해준다.
3-1. 실패 할 경우 return
3-2. 성공 할 경우 구글 로그인 정보(access token)을 가져와, 파이어베이스에 로그인을 시도한다.

 

음.. 파이어베이스에 구글 로그인을 연결해 놨는데, 왜 구글 로그인 값을 파이어베이스에다가 넘겨줘야하지? 하는 의문이 생길 수 있다.

- GoogleSignIn 객체를 통해 로그인 시도한 것은 구글의 OAuth 서비스를 이용해서 권한을 위임 받은 행위 이고,
- Auth.auth().sigIn 메소드를 통해 로그인 시도한 것은  별도의 서버 없이 간편하게 구현하기 위해 파이어베이스를 사용하기로 하였으니, 파이어베이스(내 서버)에 구글로부터 위임 받은 인증키를 넘겨주는 작업이다.

 

 

다시 정리하면, 다음과 같다.

  • 기본 개념
    • User service Provider에 계정을 가지고 잇는 사용자
    • Consumer Serivce Provider의 API(제공기능)를 사용하려는 서비스 (앱, 웹 등)
    • Service Provider OAuth를 사용하여 API 제공하는 서비스
    • Access Token 인증 완료 후 Service Provider의 제공 기능을 이용할 수 있는 권한을 위임 받은 인증키
  1. User <-> Consumer : google로 로그인하기
    • User가 Consumer인 앱을 통해 로그인 요청
  2. Consumer <-> Serivce Provider: Request Token
    • 이 앱의 서버가 구글 로그인 권한을 요청
  3. User <-> Serivce Provider: 권한 위임 확인 요청
    • 계정에 액세스 하려고 할 때 확인 받는 거
  4. User <-> Serivce Provider: 권한 위임 승인
  5. Consumer <-> Serivce Provider: Access Token
    • google이 가지고 있는 권한을 위임한 토큰 전달
  6. User <-> Consumer: 로그인 완료

 

이것이 OAuth의 기본 개념이고, 이를 활용해서 구글, 애플 등 여러 서비스의 로그인 기능을 제공할 수 있다는 걸 확인 하였다. 다음에는 구글 말고 다른 서비스 로그인을 한번 해봐야겟다.

 

--

로그인-로그아웃, 그리고 프로젝트의 UI 등 자세히 보고 싶은 경우 아래 레포를 통해 확인 할 수 있다. 

https://github.com/doitduri/UIKit-Training/tree/main/SopotifyLoginSampleApp

 

GitHub - doitduri/UIKit-Training: UIKit 관련 공부를 정리한 레포 (기초부터 ~)

UIKit 관련 공부를 정리한 레포 (기초부터 ~). Contribute to doitduri/UIKit-Training development by creating an account on GitHub.

github.com

 

 


** 이 글은 아래 문서를 기준으로 작성하였습니다.

https://developers.google.com/identity/sign-in/ios/start

 

iOS용 로그인 시도  |  Google Sign-In for iOS  |  Google Developers

iOS용 로그인 시도 iOS 샘플 앱을 사용하여 로그인 작동 방식을 확인하거나 기존 앱에 로그인을 추가하세요 . 이 샘플을 사용하려면 최신 버전의 Xcode가 설치되어 있는지 확인하십시오. 프로젝트

developers.google.com

https://firebase.google.com/docs/auth/ios/google-signin?hl=ko 

 

iOS에서 Google 로그인을 사용하여 인증  |  Firebase

Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기 의견 보내기 iOS에서 Google 로그인을 사용하여 인증 Google 로그인을 앱에 통합하여 사용자가 Google

firebase.google.com