평범한 개발자 행복한 가족, 패밀리그램

개발/안드로이드

Firebase / Firebase Auth / Google Plus 연동 시 Firebase Auth Error

패밀리그램 2016. 12. 1. 18:40

Firebase는 앱 개발자들에게 Server 개발의 부담을 줄여주는 훌륭한 서비스를 제공한다

(Storage, DB, Auth 등등)


Google Firebase Auth를 이용하면서 격었던 Error들 정리하여 포스팅 한다.

우선 Google Plus Account 를 이용하여 Firebase Auth에 연결하는데 알수 없는 에러들이 발생 하였었다.

(Google Firebase doc이 한글을 지원하지만, 부족한 부분이 많아 영문으로 변경해야 제대로 나오는 것들이 많다 -_-..)


1.  Status{statusCode=unknown status code: 12501, resolution=null}


- Unknown status code :12501 error

Google Plus 계정을 Firebase Auth로 연동하기 위해서는 GoogleSignInOption 객체를 생성할 때

requestIdToken을 지정해 주어야 한다.

위 에러는 requestIdToken에 문제가 있어 발생하는 에러이다.

(Application Signing key SHA-1 값이 달라도 발생하긴 하지만, 이부분은 기본적은 부분이라 제외)


* 만약 Google Plus 계정을 Firebase Auth에 연동하지 않고 순수하게 계정정보만 받아 오려면 GoogleSignInOption 객체 생성 시

requestIdToken을 설정하지 않으면, 계정 정보를 문제 없이 가져 올 수 있다.


// Configure Google Sign In
       
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
               
.requestIdToken(getString(R.string.default_web_client_id))
               
.requestEmail()
               
.build();

requestIdToken(String key)

이 부분에 Android OAuth2.0 Client ID가 들어가는 것이 아니라

Backend ClientId가 들어가야 하는 것이다.

즉 웹 어플리케이션의 클라이언트 ID가 들어가야한다.


(Firebase Auth 연동시 requestIdToken이 들어가야 하는 이유는 Firebase Auth에 Token을 넘겨 연동하기 때문이다.

만약 requestIdToken을 설정 하지 않으면 GoogleSignInAccount객체의 idToken값이 null로 넘어온다.)


https://console.developers.google.com

requestIdToken의 값을 변경 하면 지긋지긋한 Unknown status code :12501 error 문제는 사라진다.


2. onComlete 이후 task 결과가 isSuccessful() 가 false 인 경우

AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
        mAuth
.signInWithCredential(credential)
               
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                   
@Override
                   
public void onComplete(@NonNull Task<AuthResult> task) {
                       
Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful());

                       
// If sign in fails, display a message to the user. If sign in succeeds
                       
// the auth state listener will be notified and logic to handle the
                       
// signed in user can be handled in the listener.
                       
if (!task.isSuccessful()) {
                           
Log.w(TAG, "signInWithCredential", task.getException());
                           
Toast.makeText(GoogleSignInActivity.this, "Authentication failed.",
                                   
Toast.LENGTH_SHORT).show();
                       
}
                       
// ...
                   
}
               
});

requestIdToken이 정상적으로 요청이 되어 해당 GooglePlus ID에 token이 정상적으로 발급 됐다.

기분 좋게 마지막 연동작업을 하는데 onComlete Listener에서 성공하지 못 하는 ㅈ 같은 문제가 발생한다.

(아 스트레슼ㅋㅋㅋㅋㅋ)

이부분에 문제는 Firebase Auth 설정에 문제가 있어 발생한다.


당연히 Google Plus가 사용 설정으로 되어야 한다.

수정 버튼을 눌러 웹  SDK 구성을 살펴보자 

이곳에 웹 클라이언트 ID와 웹 클라이언트 보안 비밀 Key가 들어가야하는데,

Dev console에 들어가 웹 애플리케이션의 Client Id, Sercure key를 확인하여 Firebase Auth Google 설정에 입력하자.

https://console.developers.google.com


이렇게 하면 아래와 같은 행복한 결말을 맞이 할 수 있다.
(개발은 언제나 해피엔딩이니깤ㅋㅋㅋㅋ)


반응형