
https://developer.android.com/training/sign-in/credential-manager?hl=ko#recommendations-link
위 링크를 가지고 구글 로그인 구현을 하고자 한다. 다른 원탭 로그인 등 방법이 있지만 인증 관리자로 이전을 명시하고 있어. 우리 프로젝트에서는 위 방법을 택했다.
먼저 구글 콘솔을 통한 Android Client ID 등록(SHA-1 지문을 가져가서 웹 상 작업만 하면 된다.), Web Application Client ID를 우리 앱상으로 가져와야한다.
사전 준비가 끝났으면,
24년 2월 24일 기준으로 위 링크를 그대로 참고하면 삽질을 오래할 것이다.
그렇기에 간단하게 구현할 수 있는 코드를 여기에 작성한다.
아래 google 로그인을 위한 라이브러리를 추가하자
implementation "com.google.android.libraries.identity.googleid:googleid:<latest version>"
또한 androidx.credentials implementation을 따로 안했으면, 아래처럼 추가하자
implementation("androidx.credentials:credentials-play-services-auth:1.2.0")
이걸 추가 안하면 아래 에러가 발생할 것이다.
문서에 모든 프로젝트는 androidx.credentials를 1.2.0으로 포함해야한다고 명시되어 있긴 하다.
문서:
https://developer.android.com/jetpack/androidx/releases/credentials?hl=ko#1.2.0
java.lang.NoSuchMethodError: No direct method <init(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/Bundle;ZZLjava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V in class Landroidx/credentials/GetCustomCredentialOption; or its super classes (declaration of 'androidx.credentials.GetCustomCredentialOption' appears in ~~~
무슨 에러인지 원인이 파악이 어려워 google issue등 많은 곳을 찾아 다녔지만 원인을 알아내지는 못했다.
private val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(true)
.setAutoSelectEnabled(true)
.setServerClientId(BuildConfig.GOOGLE_CLIENT_ID)
.build()
private val request: GetCredentialRequest =
GetCredentialRequest.Builder().addCredentialOption(
googleIdOption
).build()
addCredentialOption 메소드 또한 잘못 명시 되어 있었다. (addGetCredentialOption()으로 명시되어 있음)
나머지 코드는 공식문서 상에서 시키는 대로 하면 된다.
implementation에 대한 경고나 안내를 찾아볼 수 없었고, 문서도 동기화가 아직 안된 것으로 보인다.
관련해서 issue traker에 공식문서 수정 건의를 했고 반영되면 좋겠다~!
IssueTraker