Android Firebase Google認証の追加

Android アプリに Firebase を追加

  • Firebaseプロジェクトにアプリを登録する
  • 証明書フィンガープリントを追加する
    Gladleタブの「プロジェクト名」→「Tasks」→「Android」→「signingReport」をダブルクリックする。表示された「SHA1」の値をFirebaseプロジェクトに追加する

Authenticationの設定

  • FirebaseプロジェクトのAuthenticationページを開く
  • 「Sign-in method」タブを開く
  • ログイン プロバイダ の「google」の編集をする
    「有効」に設定
    「プロジェクトのサポートメール 」を設定する
  • 「保存」をクリックする

Androidアプリの設定

コードの追加

以下のコードを追加する

private FirebaseAuth mAuth;
private GoogleSignInClient mGoogleSignInClient;
private int RC_SIGN_IN = 9001;

private static final String TAG = "GoogleActivity";
 

onCreateに追加

//region Configure Google Sign In
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestIdToken(getString(R.string.default_web_client_id))
        .requestEmail()
        .build();
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

mAuth = FirebaseAuth.getInstance();
//endregion
 
@Override
public void onStart() {
    super.onStart();

    FirebaseUser currentUser = mAuth.getCurrentUser();
    // サインインする場合
    if (currentUser == null)
        signIn();
}
 
private void signIn() {
    Intent signInIntent = mGoogleSignInClient.getSignInIntent();
    startActivityForResult(signInIntent, RC_SIGN_IN);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RC_SIGN_IN) {
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        try {
            GoogleSignInAccount account = task.getResult(ApiException.class);
            firebaseAuthWithGoogle(account);
        } catch (ApiException e) {
            Log.w(TAG, "Google sign in failed", e);
        }
    }
}

private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
    Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());

    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithCredential:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                    }
                }
            });
}
 

サインアウト

FirebaseAuthとGoogleSignInClientの2つをサインアウトする

// FirebaseAuthのサインアウト
FirebaseAuth.getInstance().signOut();

// GoogleSignInClientのサインアウト
mGoogleSignInClient.signOut().addOnCompleteListener(this,
        new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // 
                // todo
                // 
            }
        });
 

参考 サインアウトしてからサインインをする

private void SognOutToIn() {
    // FirebaseAuthのサインアウト
    FirebaseAuth.getInstance().signOut();

    // GoogleSignInClientのサインアウト
    mGoogleSignInClient.signOut().addOnCompleteListener(this,
            new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    signIn();
                }
            });
}
 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください