Android でカスタム認証システムを使用して Firebase 認証を行う

ユーザーがログインに成功したときに署名済みのカスタム トークンが生成されるように認証サーバーを変更することで、Firebase Authentication をカスタム認証システムと統合できます。アプリはこのトークンを受信して、Firebase での認証に使用します。

準備

  1. Firebase を Android プロジェクトに追加します
  2. Firebase Authentication の依存関係をアプリレベルの build.gradle ファイルに追加します。
    compile 'com.google.firebase:firebase-auth:11.2.0'
  3. プロジェクトのサーバーキーを取得します。
    1. プロジェクトの設定の [サービス アカウント] ページに移動します。
    2. [サービス アカウント] ページの [Firebase Admin SDK] セクションの一番下にある [新しい秘密鍵を生成] をクリックします。
    3. 新しいサービス アカウントの公開鍵 / 非公開鍵のペアが、お使いのパソコンに自動的に保存されます。認証サーバーにこのファイルをコピーします。

Firebase で認証する

  1. ログイン アクティビティの onCreate メソッドで、FirebaseAuth オブジェクトの共有インスタンスを取得します。
    private FirebaseAuth mAuth;
    // ...
    mAuth = FirebaseAuth.getInstance();
    
  2. アクティビティを初期化するときに、ユーザーが現在ログインしているかどうかを確認します。
    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }
    
  3. ユーザーがアプリにログインしたら、そのユーザーのログイン認証情報(たとえば、ユーザー名とパスワード)を認証サーバーに送信します。サーバーにより認証情報が確認され、認証情報が有効な場合は、カスタム トークンが返されます。
  4. 認証サーバーからカスタム トークンを受信したら、signInWithCustomToken に渡してユーザーのログインを行います。
    mAuth.signInWithCustomToken(mCustomToken)
            .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, "signInWithCustomToken:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        updateUI(user);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithCustomToken:failure", task.getException());
                        Toast.makeText(CustomAuthActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
                }
            });
    
    ログインが成功すると、AuthStateListenergetCurrentUser メソッドを使用してユーザーのアカウント データを取得できます。

次のステップ

ユーザーが初めてログインすると、新しいユーザー アカウントが作成され、ユーザーがログインに使用した認証情報(ユーザー名とパスワード、電話番号、または認証プロバイダ情報)にアカウントがリンクされます。この新しいアカウントは Firebase プロジェクトの一部として保存され、ユーザーのログイン方法にかかわらず、プロジェクトのすべてのアプリでユーザーを識別するために使用できます。

  • アプリでは FirebaseUser オブジェクトからユーザーの基本的なプロフィール情報を取得できます。詳しくはユーザーの管理についての記事をご覧ください。

  • Firebase Realtime Database と Cloud Storage のセキュリティ ルールでは、ログイン済みユーザーの一意のユーザー ID を auth 変数から取得し、それを使用してユーザーがアクセスできるデータを制御できます。

既存のユーザー アカウントに認証プロバイダの認証情報をリンクすることで、ユーザーが複数の認証プロバイダを使用してアプリにログインできるようになります。

ユーザーのログアウトを行うには signOut を呼び出します。

FirebaseAuth.getInstance().signOut();

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。