샘성의 iOS 개발 일지

구글 로그인 구현하기 본문

iOS/UiKit

구글 로그인 구현하기

SamusesApple 2023. 5. 4. 11:34
728x90

어제 한 카카오톡을 이어서

이번에는 구글 로그인을 해보려고 한다.

 

https://developers.google.com/identity/sign-in/ios/start-integrating?hl=ko 

 

iOS 및 macOS용 Google 로그인 시작하기  |  Authentication  |  Google Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 의견 보내기 iOS 및 macOS용 Google 로그인 시작하기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류

developers.google.com

 

 

1. 모듈 설치

 카카오톡과 일관되게 Cocoapods로 진행할 것이다.

pod 'GoogleSignIn' // pod file에 작성 후 ctrl+S 로 저장

pod 'GoogleSignInSwiftSupport' // SwiftUI 쓰는 경우 같이 설치 (UIkit은 필요 없음)

그리고 터미널에 파일 경로로 가서

pod install

하면 끝 -

 

 

 

 

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

필자는 OAuth 클라이언트 ID를 만들어놓지 않았기 때문에 새로 만들 것이다.

 

1. 이 글 최상단에 위치한 링크 접속

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

3. 프로젝트명 기입

 

4. 유저의 동의 화면에 보여지고 싶은 이름 입력하기

 

5. 앱 환경 - iOS 선택  >>  사용할 Xcode프로젝트의 번들 ID 입력

 

6. 완료!

 

 

 

3. 프로젝트 세팅하기 -1

1. Target - 프로젝트   >>   Info   >>   URL Types 추가하기 (하단에 + 버튼 클릭) 

 

 

2. URL Types에 발급받은 Client ID 복사하기 (하단의 형태처럼 되어있는 클라이언트ID를 역순으로 하여 사용하면 된다.)

com.googleusercontents.apps.개인아이디숫자들-문자들  // 역순으로 된 형태임

 

 

3. URL Schemes에 2번에서 복사한 클라이언트ID 붙여넣기

 

 

 

 

4. 프로젝트 세팅 -2

1. iOS 13.0 이상만 지원하는 경우, 하단의 코드를 SceneDelegate에 추가

import GoogleSignIn
// SceneDelegate 13.0 이상 지원인 경우

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        guard let googleURL = URLContexts.first?.url else { return }
        let _ = GIDSignIn.sharedInstance.handle(googleURL)
	}

 

1-1. iOS 13.0 이하 버전도 지원하는 경우, 하단 코드를 AppDelegate에 추가적으로 세팅 (필자는 패스 ..~)

import GoogleSignIn
// AppDelegate - 13.0 이하 지원 하는 경우, 추가적으로 세팅

func application(
        _ app: UIApplication,
        open url: URL,
        options: [UIApplication.OpenURLOptionsKey: Any] = [:]
    ) -> Bool {
		if GIDSignIn.sharedInstance.handle(url) {
        return true
    }
    return false
}

 

 

2. 로그인 구현할 ViewController에 하단 코드로 로그인 구현 및 로그인 정보로 원하는 로직 구현하면 된다.

// 로그인을 구현할 ViewController
import GoogleSignIn

let config = GIDConfiguration(clientID: "개인 클라이언트ID (이번엔 역순 아님!!!!!!)")
        GIDSignIn.sharedInstance.configuration = config
        GIDSignIn.sharedInstance.signIn(withPresenting: self) { [weak self] user, error in
            if let error = error { print(error); return }
            // do something
        }

 

 

2-1. 로그인 여부 체크 후, 로그인 경우 로그아웃 / 버튼 누르고 로그인 하면, label text를 유저 프로필 이름으로 바꾸게 해봤다.

 @IBAction func handleGoogleButton(_ sender: Any) {
        let config = GIDConfiguration(clientID: "개인 클라이언트ID - 이번엔 역순 아님 주의")
        GIDSignIn.sharedInstance.configuration = config
        
        if GIDSignIn.sharedInstance.hasPreviousSignIn() { //로그인 여부 확인
            GIDSignIn.sharedInstance.signOut()
            self.userNameLabel.text = "구글 로그아웃 완료"
            return 
        }
        GIDSignIn.sharedInstance.signIn(withPresenting: self) { [weak self] user, error in
            if let error = error { print(error); return }
            self?.userNameLabel.text = user?.user.profile?.name
        }
    }

 

 

 

 

 

- 끝

728x90