[iOS] 구글 로그인

홍승현·2022년 11월 12일
0

Social Login

목록 보기
1/1
post-thumbnail

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

1. 패키지 설치

https://github.com/google/GoogleSignIn-iOS

2. OAuth 클라이언트 가져오기

  • 구글 로그인을 구현하려면 GCP(Google Cloud Platform)에 project가 필요하다. GCP에서 직접 생성하거나, 문서 내에서 제공하는 OAuth 클라이언트 ID 만들기를 이용하여 간단하게 프로젝트 및 클라이언트 ID를 생성할 수 있다.

2-1. OAuth 클라이언트 ID 만들기 클릭

2-2. 프로젝트 선택

+ Create a new project를 눌러 새 프로젝트를 만듦과 동시에 선택할 수 있다.

2-3. Client와 BundleID 설정

Bundle ID는 프로젝트의 BundleID를 붙여넣으면 된다.

2-4. 발급된 ID 저장 및 복사

버튼을 누르면 credentials.plist로 저장되며, 내부에 ClientID값이 현재 사진에 보이는 동일한 값으로 저장되어있다(보안을 위해 가림).

또한 GCP - Project - 사용자 인증 정보탭을 통해 Client ID 값을 확인할 수 있다.

3. URL 스키마 추가하기(반전시켜 적용)

Target(프로젝트명) -> Info -> URL Types 추가

ClientID값을 URL Schemes에 넣되, dot(.)을 기준으로 반전시켜 작성한다.

// Client ID: 1234567890-abcdefg.apps.googleusercontent.com 라면
com.googleusercontent.apps.1234567890-abcdefg // 이렇게 적용시키면 된다.

4. 코드 추가하기

구글 로그인 기능을 구현할 ViewController에서 구글 로그인 버튼의 Action 메서드 내부에 다음의 코드를 작성한다.

Note: GIDConfiguration에서 clientID값은 반전시키지 않고 넣어주어야 한다. 오로지 반전된 값은 URL Scheme에서만!

let id = "1234567890-abcdefg.apps.googleusercontent.com" // 여기서는 반전시키지 말고 ID값 그대로 적용한다.
let signInConfig = GIDConfiguration(clientID: id)
GIDSignIn.sharedInstance.signIn(with: signInConfig, presenting: self) { user, error in
  guard error == nil else { return }
  guard let user else { return }
  
  let email = user.profile?.email
  let name = user.profile?.name
  
  
  // 1. do를 통해 가져오기
  user.authentication.do { authentication, error in
    guard let authentication = authentication else { return }
    let idToken       = authentication.idToken
    let accessToken   = authentication.accessToken
    let refreshToken  = authentication.refreshToken
    let clientID      = authentication.clientID
  }
  
  // 2. authentication에서 바로 가져오기
  let idToken       = user.authentication.idToken
  let accessToken   = user.authentication.accessToken
  let refreshToken  = user.authentication.refreshToken
  let clientID      = user.authentication.clientID
  print(accessToken)
}

이러면, 구글로 로그인이 정상적으로 완료될 시 email, name, idToken, accessToken, refreshToken, clientID 등 여러 정보를 추출할 수 있게 된다.

profile
블로그 이전: https://www.whitehyun.com

0개의 댓글