TAE

[Android/Kotlin]SNS(google) 로그인 본문

android

[Android/Kotlin]SNS(google) 로그인

tg-world 2023. 6. 25. 14:42
반응형

이번에는 SNS로그인 중 google로그인을 구현해 보겠습니다.

카카오 로그인은 

https://tg-world.tistory.com/17

 

[Android / Kotlin] SNS(카카오)로그인

이번에는 Kakao Developers에서 카카오 로그인 api를 활용하여 로그인 기능을 구현해 보겠습니다. https://developers.kakao.com/ Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카

tg-world.tistory.com

이 포스팅을 참고하시면 됩니다.

 

1. 프로젝트 설정

기본 요건은 아래와 같습니다.

 

- Android 4.4이상이여야 하고, Google Play 스토어 또는 Android 4.2.2 이상 기반의 Google API 플랫폼을 실행하고 Google Play 서비스가 포함된 AVD가 포함된 에뮬레이터를 포함하는 호환 Android 기기 버전 15.0.0 이상

- SKD 도구 구성요소를 포함한 최신 버전의 Android SDK SDK는 Android 스튜디오의 Android SDK Manager에서 사용 할 수 있습니다.

- Android 4.4(KitKat) 이상에서 컴파일

 

google로그인은 아래 사이트( google 클라우드 플랫폼)에 접속하여 앱을 등록해야 합니다.

https://console.cloud.google.com/welcome?project=perceptive-lamp-390406 

 

Google 클라우드 플랫폼

로그인 Google 클라우드 플랫폼으로 이동

accounts.google.com

 

API 및 서비스 > 사용자 인증 정보  > 사용자 인증 정보 만들기 > OAuth 2.0 클라이언트 ID 

생성 후 프로젝트 이름, 패키지 이름, SHA-1 인증서를 등록해 줍니다.

SHA-1인증서는 debug용을 사용할 예정입니다.

안드로이드 스튜디오에서 하단 Terminal에서 명령어를 입력하여 줍니다.

 

Window : keytool -list -v \ -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore

 

Mac : keytool -list -v \ -alias androiddebugkey -keystore ~/.android/debug.keystore

 

password는 android 를 입력해 주시면 됩니다.

 

인증서 지문: 

SHA1: 32:A7:C2:BB:E2:G1:SW:55:41:CS:41:D0:DD:F2:34:Q2:2A:CA:FF:36 

 

위와 같은 형식으로 나오게 되는 SHA1 지문을 복사하여 입력하시면 됩니다.

 

2. Gradle설정

build.gradle(app) 부분에 아래 코드를 설정해줍니다.

dependencies {
...
	implementation "com.google.android.gms:play-services-auth:20.1.0" //google로그인
}

 

3. 코드

LoginActivity.kt

앱에 필요한 사용자 데이터를 요청하도록 구글 로그인을 구성하여 줍니다. 사용자의 ID와 기본 프로필 정보를 요청하기 위해 GoogleSignInOption 인스턴스 생성 시 파라미터로 DEFAULT_SIGN_IN을 전달하고, 사용자의 이메일 주소를 요청하기 위해 requestEmail()을 호출하여 줍니다.

val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build()

 

gso를 통해 가져올 클라이언트의 정보를 담을 객체를 만들어 줍니다.

val mGoogleSignInClient = GoogleSignIn.getClient(this,gso)

 

xml 구성

<com.google.android.gms.common.SignInButton
 android:id="@+id/sign_in_button"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />

 

GoogleSignResultLauncher 생성

private lateinit var GoogleSignResultLauncher:ActivityResultLauncher<Intent>

 GoogleSignResultLauncher = registerForActivityResult(
            ActivityResultContracts.StartActivityForResult()){ result ->
            val task: Task<GoogleSignInAccount> = GoogleSignIn.getSignedInAccountFromIntent(result.data)
            handleSignInResult(task)
        }

StartActivityForResult가 deprecated 되었기 때문에 registerForActivityResult 를 사용하였습니다.

 

handleSignInResult

사용자 정보를 가져옵니다.

fun handleSignInResult(completedTask: Task<GoogleSignInAccount>) {
    try {
        val account = completedTask.getResult(ApiException::class.java)
        val email = account?.email.toString()
        var googletoken = account?.idToken.toString()
        var googletokenAuth = account?.serverAuthCode.toString()

        Log.e("Google account",email)
        Log.e("Google account",googletoken)
        Log.e("Google account", googletokenAuth)
    } catch (e: ApiException){
        Log.e("Google account","signInResult:failed Code = " + e.statusCode)
    }
}

로그인한 사용자에 대한 정보가 반환되기 때문에, task를 이용해 다음과 같이 사용자의 정보를 다룰 수 있습니다.

 

참조

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

https://developers.google.com/identity/sign-in/android/sign-in

반응형
Comments