Android で Firebase 匿名認証を行う

Firebase で認証する一時的な匿名アカウントを、Firebase Authentication で作成して使用できます。一時的な匿名アカウントを使用すると、アプリに登録していないユーザーが、セキュリティ ルールで保護されているデータを使用できるようになります。匿名ユーザーのアプリへの登録では、ログイン認証情報を匿名アカウントにリンクして、以後のセッションでも引き続き、保護されているデータを使用可能にできます。

準備

  1. Firebase を Android プロジェクトに追加します
  2. Firebase Authentication の依存関係をアプリレベルの build.gradle ファイルに追加します。
    compile 'com.google.firebase:firebase-auth:11.2.0'
  3. アプリを Firebase プロジェクトに接続していない場合は、Firebase コンソールで接続します。
  4. 匿名認証を有効にします。
    1. Firebase コンソールで [Auth] セクションを開きます。
    2. [ログイン方法] ページで [匿名] を有効にします。

Firebase 匿名認証を行う

ログアウトしたユーザーが 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. 最後に、signInAnonymously を呼び出して匿名ユーザーとしてログインします。
    mAuth.signInAnonymously()
            .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, "signInAnonymously:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        updateUI(user);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInAnonymously:failure", task.getException());
                        Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
    
                    // ...
                }
            });
    
    ログインが成功した場合は、getCurrentUser メソッドを使用してユーザーのアカウント データを取得できます。

匿名アカウントを永久アカウントに変換する

匿名ユーザーのアプリへの登録では、新しいアカウントによる作業の続行が場合により必要です。たとえば、アプリへの登録前にユーザーがショッピング カートに追加したアイテムを、新しいアカウントのショッピング カートに追加できるようにします。これを行う手順は次のとおりです。

  1. ユーザーがアプリに登録したら、ユーザーの認証プロバイダのログインフローを行います(ただし、いずれかの FirebaseAuth.signInWith メソッドを呼び出す手前まで)。たとえば、ユーザーの Google ID トークン、Facebook アクセス トークン、メールアドレスとパスワードを取得します。
  2. 新しい認証プロバイダの AuthCredential を取得します。

    Google ログイン
    AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
    
    Facebook ログイン
    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
    
    メールアドレスとパスワードによるログイン
    AuthCredential credential = EmailAuthProvider.getCredential(email, password);
    
  3. ログイン ユーザーの linkWithCredential メソッドに AuthCredential オブジェクトを渡します。

    mAuth.getCurrentUser().linkWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "linkWithCredential:success");
                        FirebaseUser user = task.getResult().getUser();
                        updateUI(user);
                    } else {
                        Log.w(TAG, "linkWithCredential:failure", task.getException());
                        Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
    
                    // ...
                }
            });
    

linkWithCredential の呼び出しが成功したら、ユーザーの新しいアカウントが匿名アカウントの Firebase データにアクセスできるようになります。

次のステップ

これで、ユーザーが Firebase で認証できるようになったため、Firebase ルールを使用して、Firebase データベースのデータに対するユーザーのアクセス権を制御できます。

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

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