본문 바로가기

프로그램/Android

안드로이드 구글로그인 기능

회사에서 카카오와 네이버 의외에 구글로그인 기능도 추가 개발을 요구하여 구글 기능을 붙이게 되면서 글을 쓰게 되었습니다.

 

구글로그인은 예전에 해보고 간만에 해봐서 조금 구글링을 하여 작업을 진행했습니다.

 

일단 먼저 해줘야하는 Firebase에 앱 등록이 있는데 그건 넘어가도록 하겠습니다.

 

등록 후 구글 API에 들어가서 사용할 키를 생성해줘야합니다.(클릭)


1. 메뉴 > API 및 서비스 > 사용자 인증 정보 클릭

 

 

2. 사용자 인증정보 만들기 > OAuth 클라이언트 ID 선택

 

3. 웹 어플리케이션을 선택

 

4. 아래와같이 뭐 별다른거 없이 만들기

 

 

5. 웹 어플리케이션 다음 Android  어플리케이션 추가를 히야한다. 다음은 위와 다르게 패키지명과 SHA-1인증서 디지털 지문이 필요하다. 지문을 구하는 방법은 밑에서 설명할 예정이며, 등록시 클라이어인트 ID가 생성된다. 

 

 

6. SHA-1 인증서 디지털 지문을 추출하는 방법은 Android Studio 우측 상단에 코끼리 모양 클릭 -> signingReport클릭 -> 하단에서 SHA1 이 추출된다. 여기서 디버그용릴리즈용이 각각 추출되므로 실 배포를 한다면 두가지 키를 다 등록해야할것이다.

 

위와 같이 하였다면 구글로그인 개발이 준비가 되었다.

 

이제부터 구글 로그인에 대한 작업을 진행하는데 무작정 구글링하여 개발하니 기능들이 다 Deprecated 되어있었다.

 

그리하여 좀더 알아본 결과 아래와같이 발견할수 있었다.(관련링크)

 

결국 Android Credential Manager 을 이용하여 개발을 진행하여야 하며 관련 샘플코드는 아래와같고 개발 공식문서에도 잘 나와있다

 

1. 구글 로그인 관련 라이브러리 추가

const val google_login_credentials = "androidx.credentials:credentials:${Version.google_login_credentials}"
const val google_login_services = "androidx.credentials:credentials-play-services-auth:${Version.google_login_credentials}"
const val google_login_googleid = "com.google.android.libraries.identity.googleid:googleid:${Version.google_login_googleid}"

 

const val google_login_credentials = "1.2.2"
const val google_login_googleid = "1.1.0"

 

2. 구글 로그인 개발

val credentialManager = CredentialManager.create(requireContext())

val googleIdOption = GetGoogleIdOption.Builder()
    .setFilterByAuthorizedAccounts(false)   //구글계정 유무체크
    .setServerClientId("")  //웹클라이언트 키값
    .setAutoSelectEnabled(true) //자동 로그인 활성화
    .build()

val request = GetCredentialRequest.Builder()
    .addCredentialOption(googleIdOption)
    .build()

viewLifecycleOwner.lifecycleScope.launch {
    runCatching {
        val result = credentialManager.getCredential(requireContext(), request)
        when(val data = result.credential) {
            is CustomCredential -> {
                if(data.type == GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL) {
                    val googleIdTokenCredential = GoogleIdTokenCredential.createFrom(data.data)

                    Logger.e("data.type : ${googleIdTokenCredential.id}")
                    Logger.e("data.type : ${googleIdTokenCredential.displayName}")
                    Logger.e("data.type : ${googleIdTokenCredential.profilePictureUri.toString()}")
                }
            }
        }
    }.onFailure { it ->
        Logger.e("Google Login Error : $it")
    }
}

 

이렇게 구글로그인후 가져올 수 있는 데이터는 아래와같다(전화번호는 있지만 들어오지 않는다)

 

그리고 개발하다가  Developer console is not set up correctly 라는 에러를 발견한다면 키를 잘못 사용하거나 설정이 잘못된것이다

키는 안드로이드 어플리케이션이 아닌 웹 어플리케이션의 키로 등록을 하여야한다.

반응형