Firebase Summit で発表されたすべての情報をご覧ください。Firebase を使用してアプリ開発を加速し、自信を持ってアプリを実行する方法を紹介しています。詳細

電話番号を使用してAndroid上のFirebaseで認証する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

SMS メッセージをユーザーの電話に送信することで、Firebase Authentication を使用してユーザーをサインインさせることができます。ユーザーは、SMS メッセージに含まれるワンタイム コードを使用してサインインします。

アプリに電話番号サインインを追加する最も簡単な方法は、 FirebaseUIを使用することです。これには、電話番号サインインのサインイン フローを実装するドロップイン サインイン ウィジェットと、パスワード ベースのフェデレーション サインが含まれています。 -の。このドキュメントでは、Firebase SDK を使用して電話番号ログイン フローを実装する方法について説明します。

あなたが始める前に

  1. まだ行っていない場合は、 Firebase を Android プロジェクトに追加します
  2. モジュール (アプリ レベル) の Gradle ファイル(通常は<project>/<app-module>/build.gradle ) で、Firebase Authentication Android ライブラリの依存関係を追加します。ライブラリのバージョン管理には、 Firebase Android BoMを使用することをお勧めします。

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.1.0')
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth'
    }
    

    Firebase Android BoMを使用すると、アプリは常に互換性のあるバージョンの Firebase Android ライブラリを使用します。

    (代替) BoM を使用せずに Firebase ライブラリの依存関係を追加する

    Firebase BoM を使用しないことを選択した場合は、依存関係の行で各 Firebase ライブラリ バージョンを指定する必要があります。

    アプリで複数のFirebase ライブラリを使用する場合は、BoM を使用してライブラリ バージョンを管理することを強くお勧めします。これにより、すべてのバージョンに互換性が確保されます。

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth:21.1.0'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.1.0')
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx'
    }
    

    Firebase Android BoMを使用すると、アプリは常に互換性のあるバージョンの Firebase Android ライブラリを使用します。

    (代替) BoM を使用せずに Firebase ライブラリの依存関係を追加する

    Firebase BoM を使用しないことを選択した場合は、依存関係の行で各 Firebase ライブラリ バージョンを指定する必要があります。

    アプリで複数のFirebase ライブラリを使用する場合は、BoM を使用してライブラリ バージョンを管理することを強くお勧めします。これにより、すべてのバージョンに互換性が確保されます。

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx:21.1.0'
    }
    
  3. アプリを Firebase プロジェクトにまだ接続していない場合は、 Firebase コンソールから接続します。
  4. Firebase コンソールでアプリの SHA-1 ハッシュをまだ設定していない場合は、設定してください。アプリの SHA-1 ハッシュを見つける方法については、クライアントの認証を参照してください。

セキュリティ上の懸念

電話番号のみを使用した認証は便利ですが、電話番号の所有権がユーザー間で簡単に譲渡される可能性があるため、他の使用可能な方法よりも安全性が低くなります。また、複数のユーザー プロファイルを持つデバイスでは、SMS メッセージを受信できるユーザーは、デバイスの電話番号を使用してアカウントにサインインできます。

アプリで電話番号ベースのサインインを使用する場合は、より安全なサインイン方法と一緒に提供し、電話番号によるサインインの使用によるセキュリティのトレードオフについてユーザーに通知する必要があります。

Firebase プロジェクトの電話番号ログインを有効にする

ユーザーを SMS でサインインするには、最初に Firebase プロジェクトで電話番号によるサインイン方法を有効にする必要があります。

  1. Firebase コンソールで、[認証]セクションを開きます。
  2. [サインイン方法]ページで、電話番号によるサインイン方法を有効にします。

Firebase の電話番号サインイン リクエスト クォータは十分に高いため、ほとんどのアプリは影響を受けません。ただし、電話認証を使用して大量のユーザーをサインインさせる必要がある場合は、料金プランのアップグレードが必要になる場合があります。料金ページをご覧ください。

アプリの確認を有効にする

電話番号認証を使用するには、電話番号サインイン リクエストがアプリからのものであることを Firebase が確認できる必要があります。 Firebase Authentication がこれを実現する方法は 2 つあります。

  • SafetyNet : ユーザーが Google Play Services がインストールされたデバイスを持っていて、Firebase Authentication がAndroid SafetyNetを使用してデバイスを正当なものとして検証できる場合、電話番号によるサインインを続行できます。
  • Firebase Authentication で使用するために SafetyNet を有効にするには:

    1. Google Cloud Console で、プロジェクトのAndroid DeviceCheck APIを有効にします。デフォルトの Firebase API キーが使用され、DeviceCheck API へのアクセスを許可する必要があります。
    2. アプリの SHA-256 フィンガープリントをまだ指定していない場合は、Firebase コンソールの[設定] ページから指定してください。アプリの SHA-256 フィンガープリントを取得する方法の詳細については、クライアントの認証を参照してください。
  • reCAPTCHA 検証: ユーザーが Google Play Services をサポートしていない場合や、エミュレータでアプリをテストする場合など、SafetyNet を使用できない場合、Firebase Authentication は reCAPTCHA 検証を使用して電話サインイン フローを完了します。多くの場合、reCAPTCHA チャレンジは、ユーザーが何も解決しなくても完了できます。このフローでは、SHA-1 がアプリケーションに関連付けられている必要があることに注意してください。このフローでは、API キーが「${PROJECT_NAME}.firebaseapp.com」に対して制限されていないか許可リストに登録されている必要もあります。

ユーザーの電話に確認コードを送信する

電話番号によるサインインを開始するには、電話番号の入力を促すインターフェイスをユーザーに提示します。法的要件はさまざまですが、ベスト プラクティスとして、またユーザーの期待を設定するために、ユーザーが電話によるサインインを使用する場合、確認のために SMS メッセージを受信する可能性があり、標準料金が適用されることをユーザーに通知する必要があります。

次に、ユーザーの電話番号をPhoneAuthProvider.verifyPhoneNumberメソッドに渡して、Firebase にユーザーの電話番号を確認するように要求します。例えば:

Java

PhoneAuthOptions options = 
  PhoneAuthOptions.newBuilder(mAuth) 
      .setPhoneNumber(phoneNumber)       // Phone number to verify
      .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit
      .setActivity(this)                 // Activity (for callback binding)
      .setCallbacks(mCallbacks)          // OnVerificationStateChangedCallbacks
      .build();
  PhoneAuthProvider.verifyPhoneNumber(options);     

Kotlin+KTX

val options = PhoneAuthOptions.newBuilder(auth)
    .setPhoneNumber(phoneNumber)       // Phone number to verify
    .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit
    .setActivity(this)                 // Activity (for callback binding)
    .setCallbacks(callbacks)          // OnVerificationStateChangedCallbacks
    .build()
PhoneAuthProvider.verifyPhoneNumber(options)

verifyPhoneNumberメソッドは再入可能です。アクティビティのonStartメソッドなどで複数回呼び出すと、元の要求がタイムアウトしない限り、 verifyPhoneNumberメソッドは 2 番目の SMS を送信しません。

この動作を使用して、ユーザーがサインインする前にアプリが閉じた場合 (たとえば、ユーザーが SMS アプリを使用している間)、電話番号のサインイン プロセスを再開できます。 verifyPhoneNumberを呼び出した後、検証が進行中であることを示すフラグを設定します。次に、アクティビティのonSaveInstanceStateメソッドにフラグを保存し、 onRestoreInstanceStateでフラグを復元します。最後に、Activity のonStartメソッドで、検証が既に進行中であるかどうかを確認し、進行中の場合は、 verifyPhoneNumberを再度呼び出します。検証が完了または失敗した場合は、必ずフラグをクリアしてください (「検証コールバック」を参照)。

画面の回転やアクティビティの再起動の他のインスタンスを簡単に処理するには、Activity をverifyPhoneNumberメソッドに渡します。アクティビティが停止すると、コールバックは自動的にデタッチされるため、コールバック メソッドに UI 遷移コードを自由に記述できます。

Firebase から送信される SMS メッセージは、Auth インスタンスのsetLanguageCodeメソッドを介して認証言語を指定することで、ローカライズすることもできます。

Java

auth.setLanguageCode("fr");
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage();

Kotlin+KTX

auth.setLanguageCode("fr")
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage()

PhoneAuthProvider.verifyPhoneNumberを呼び出すときは、リクエストの結果を処理するコールバック関数の実装を含むOnVerificationStateChangedCallbacksのインスタンスも提供する必要があります。例えば:

Java

mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

    @Override
    public void onVerificationCompleted(PhoneAuthCredential credential) {
        // This callback will be invoked in two situations:
        // 1 - Instant verification. In some cases the phone number can be instantly
        //     verified without needing to send or enter a verification code.
        // 2 - Auto-retrieval. On some devices Google Play services can automatically
        //     detect the incoming verification SMS and perform verification without
        //     user action.
        Log.d(TAG, "onVerificationCompleted:" + credential);

        signInWithPhoneAuthCredential(credential);
    }

    @Override
    public void onVerificationFailed(FirebaseException e) {
        // This callback is invoked in an invalid request for verification is made,
        // for instance if the the phone number format is not valid.
        Log.w(TAG, "onVerificationFailed", e);

        if (e instanceof FirebaseAuthInvalidCredentialsException) {
            // Invalid request
        } else if (e instanceof FirebaseTooManyRequestsException) {
            // The SMS quota for the project has been exceeded
        }

        // Show a message and update the UI
    }

    @Override
    public void onCodeSent(@NonNull String verificationId,
                           @NonNull PhoneAuthProvider.ForceResendingToken token) {
        // The SMS verification code has been sent to the provided phone number, we
        // now need to ask the user to enter the code and then construct a credential
        // by combining the code with a verification ID.
        Log.d(TAG, "onCodeSent:" + verificationId);

        // Save verification ID and resending token so we can use them later
        mVerificationId = verificationId;
        mResendToken = token;
    }
};

Kotlin+KTX

callbacks = object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

    override fun onVerificationCompleted(credential: PhoneAuthCredential) {
        // This callback will be invoked in two situations:
        // 1 - Instant verification. In some cases the phone number can be instantly
        //     verified without needing to send or enter a verification code.
        // 2 - Auto-retrieval. On some devices Google Play services can automatically
        //     detect the incoming verification SMS and perform verification without
        //     user action.
        Log.d(TAG, "onVerificationCompleted:$credential")
        signInWithPhoneAuthCredential(credential)
    }

    override fun onVerificationFailed(e: FirebaseException) {
        // This callback is invoked in an invalid request for verification is made,
        // for instance if the the phone number format is not valid.
        Log.w(TAG, "onVerificationFailed", e)

        if (e is FirebaseAuthInvalidCredentialsException) {
            // Invalid request
        } else if (e is FirebaseTooManyRequestsException) {
            // The SMS quota for the project has been exceeded
        }

        // Show a message and update the UI
    }

    override fun onCodeSent(
        verificationId: String,
        token: PhoneAuthProvider.ForceResendingToken
    ) {
        // The SMS verification code has been sent to the provided phone number, we
        // now need to ask the user to enter the code and then construct a credential
        // by combining the code with a verification ID.
        Log.d(TAG, "onCodeSent:$verificationId")

        // Save verification ID and resending token so we can use them later
        storedVerificationId = verificationId
        resendToken = token
    }
}

検証コールバック

ほとんどのアプリでは、 onVerificationCompletedonVerificationFailed 、およびonCodeSentコールバックを実装します。アプリの要件によっては、 onCodeAutoRetrievalTimeOutを実装することもできます。

onVerificationCompleted(PhoneAuthCredential)

このメソッドは、次の 2 つの状況で呼び出されます。

  • 即時確認: 場合によっては、確認コードを送信または入力しなくても、電話番号を即座に確認できます。
  • 自動取得: 一部のデバイスでは、Google Play サービスが着信確認 SMS を自動的に検出し、ユーザーの操作なしで確認を実行できます。 (この機能は、一部の通信事業者では利用できない場合があります。)これは、SMS メッセージの末尾に 11 文字のハッシュを含むSMS Retriever APIを使用します。
いずれの場合も、ユーザーの電話番号は正常に検証されており、コールバックに渡されたPhoneAuthCredentialオブジェクトを使用してユーザーをサインインできます

onVerificationFailed(FirebaseException)

このメソッドは、無効な電話番号や検証コードを指定するリクエストなど、無効な検証リクエストに応答して呼び出されます。

onCodeSent(String validationId, PhoneAuthProvider.ForceResendingToken)

オプション。このメソッドは、確認コードが SMS によって指定された電話番号に送信された後に呼び出されます。

このメソッドが呼び出されると、ほとんどのアプリは、SMS メッセージから確認コードを入力するようユーザーに求める UI を表示します。 (同時に、バックグラウンドで自動検証が進行している可能性があります。) 次に、ユーザーが検証コードを入力した後、メソッドに渡された検証コードと検証 ID を使用して、 PhoneAuthCredentialオブジェクトを作成できます。次に、ユーザーのサインインに使用できます。ただし、一部のアプリはonCodeAutoRetrievalTimeOutが呼び出されるまで待ってから、確認コード UI を表示する場合があります (推奨されません)。

onCodeAutoRetrievalTimeOut(String validationId)

オプション。このメソッドは、最初にonVerificationCompletedがトリガーされることなく、 verifyPhoneNumberに指定されたタイムアウト期間が経過した後に呼び出されます。 SIM カードのないデバイスでは、SMS の自動取得ができないため、このメソッドはすぐに呼び出されます。

一部のアプリは、自動検証期間がタイムアウトするまでユーザー入力をブロックし、その後で初めて、ユーザーに SMS メッセージから検証コードを入力するよう求める UI を表示します (推奨されません)。

PhoneAuthCredential オブジェクトを作成する

Firebase からユーザーの電話に送信された確認コードをユーザーが入力したら、確認コードとonCodeSentまたはonCodeAutoRetrievalTimeOutコールバックに渡された確認 ID を使用してPhoneAuthCredentialオブジェクトを作成します。 ( onVerificationCompletedが呼び出されると、 PhoneAuthCredentialオブジェクトが直接取得されるため、この手順はスキップできます。)

PhoneAuthCredentialオブジェクトを作成するには、 PhoneAuthProvider.getCredentialを呼び出します。

Java

PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);

Kotlin+KTX

val credential = PhoneAuthProvider.getCredential(verificationId!!, code)

ユーザーにサインインする

onVerificationCompletedコールバックで、またはPhoneAuthProvider.getCredentialを呼び出してPhoneAuthCredentialオブジェクトを取得したら、 PhoneAuthCredentialオブジェクトをFirebaseAuth.signInWithCredentialに渡してサインイン フローを完了します。

Java

private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
    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 = task.getResult().getUser();
                        // Update UI
                    } else {
                        // Sign in failed, display a message and update the UI
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
                            // The verification code entered was invalid
                        }
                    }
                }
            });
}

Kotlin+KTX

private fun signInWithPhoneAuthCredential(credential: PhoneAuthCredential) {
    auth.signInWithCredential(credential)
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    // Sign in success, update UI with the signed-in user's information
                    Log.d(TAG, "signInWithCredential:success")

                    val user = task.result?.user
                } else {
                    // Sign in failed, display a message and update the UI
                    Log.w(TAG, "signInWithCredential:failure", task.exception)
                    if (task.exception is FirebaseAuthInvalidCredentialsException) {
                        // The verification code entered was invalid
                    }
                    // Update UI
                }
            }
}

架空の電話番号でテストする

Firebase コンソールを介して、開発用の架空の電話番号を設定できます。架空の電話番号を使用したテストには、次の利点があります。

  • 使用クォータを消費せずに電話番号認証をテストします。
  • 実際の SMS メッセージを送信せずに電話番号認証をテストします。
  • 調整されることなく、同じ電話番号で連続してテストを実行します。これにより、レビュー担当者がたまたま同じ電話番号をテストに使用した場合に、App Store のレビュー プロセス中に拒否されるリスクが最小限に抑えられます。
  • Google Play Services を使用せずに iOS シミュレーターや Android エミュレーターで開発する機能など、追加の労力を必要とせずに開発環境で簡単にテストできます。
  • 本番環境で実際の電話番号に通常適用されるセキュリティ チェックによってブロックされることなく、統合テストを記述します。

架空の電話番号は、次の要件を満たす必要があります。

  1. 実際に架空のものであり、まだ存在していない電話番号を使用していることを確認してください。 Firebase Authentication では、実際のユーザーが使用する既存の電話番号をテスト番号として設定することはできません。 1 つのオプションは、555 のプレフィックス番号を米国のテスト用電話番号として使用することです。たとえば、 +1 650-555-3434 です。
  2. 電話番号は、長さやその他の制約に合わせて正しくフォーマットする必要があります。実際のユーザーの電話番号と同じ検証が行われます。
  3. 開発用に最大 10 個の電話番号を追加できます。
  4. 推測しにくいテスト用の電話番号/コードを使用し、頻繁に変更してください。

架空の電話番号と確認コードを作成する

  1. Firebase コンソールで、[認証]セクションを開きます。
  2. [サインイン方法] タブで、電話プロバイダーをまだ有効にしていない場合は有効にします。
  3. アコーディオン メニューをテストするための電話番号を開きます。
  4. テストする電話番号を入力します (例: +1 650-555-3434 )
  5. その特定の番号の 6 桁の確認コードを入力します (例: 654321 )
  6. 番号を追加します。必要に応じて、対応する行にカーソルを合わせてゴミ箱アイコンをクリックすると、電話番号とそのコードを削除できます。

手動テスト

アプリケーションで架空の電話番号の使用を直接開始できます。これにより、割り当ての問題やスロットリングに遭遇することなく、開発段階で手動テストを実行できます。 Google Play サービスがインストールされていない iOS シミュレーターまたは Android エミュレーターから直接テストすることもできます。

架空の電話番号を入力して確認コードを送信すると、実際の SMS は送信されません。代わりに、以前に構成した確認コードを入力してサインインを完了する必要があります。

サインインが完了すると、その電話番号を使用して Firebase ユーザーが作成されます。ユーザーは、実際の電話番号ユーザーと同じ動作とプロパティを持ち、Realtime Database/Cloud Firestore やその他のサービスに同じ方法でアクセスできます。このプロセスで作成された ID トークンには、実際の電話番号ユーザーと同じ署名があります。

別のオプションとして、これらのユーザーにカスタム クレームを介してテスト ロールを設定し、アクセスをさらに制限する場合に偽のユーザーとして区別することもできます。

テストのために reCAPTCHA フローを手動でトリガーするには、 forceRecaptchaFlowForTesting()メソッドを使用します。

// Force reCAPTCHA flow
FirebaseAuth.getInstance().getFirebaseAuthSettings().forceRecaptchaFlowForTesting();

統合テスト

手動テストに加えて、Firebase Authentication は、電話認証テスト用の統合テストを作成するのに役立つ API を提供します。これらの API は、Web の reCAPTCHA 要件と iOS のサイレント プッシュ通知を無効にすることで、アプリの検証を無効にします。これにより、これらのフローで自動化テストが可能になり、実装が容易になります。さらに、Android で即時確認フローをテストする機能を提供するのに役立ちます。

Android では、 signInWithPhoneNumber呼び出しの前にsetAppVerificationDisabledForTesting()を呼び出します。これにより、アプリの検証が自動的に無効になり、手動で解決しなくても電話番号を渡すことができます。 reCAPTCHA や SafetyNet が無効になっていても、実際の電話番号を使用してもサインインは完了しないことに注意してください。この API で使用できるのは架空の電話番号のみです。

// Turn off phone auth app verification.
FirebaseAuth.getInstance().getFirebaseAuthSettings()
   .setAppVerificationDisabledForTesting();

架空の番号でverifyPhoneNumberを呼び出すと、 onCodeSentコールバックがトリガーされます。このコールバックでは、対応する確認コードを提供する必要があります。これにより、Android エミュレーターでのテストが可能になります。

Java

String phoneNum = "+16505554567";
String testVerificationCode = "123456";

// Whenever verification is triggered with the whitelisted number,
// provided it is not set for auto-retrieval, onCodeSent will be triggered.
FirebaseAuth auth = FirebaseAuth.getInstance();
PhoneAuthOptions options = PhoneAuthOptions.newBuilder(auth)
        .setPhoneNumber(phoneNum)
        .setTimeout(60L, TimeUnit.SECONDS)
        .setActivity(this)
        .setCallbacks(new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            @Override
            public void onCodeSent(String verificationId,
                                   PhoneAuthProvider.ForceResendingToken forceResendingToken) {
                // Save the verification id somewhere
                // ...

                // The corresponding whitelisted code above should be used to complete sign-in.
                MainActivity.this.enableUserManuallyInputCode();
            }

            @Override
            public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
                // Sign in with the credential
                // ...
            }

            @Override
            public void onVerificationFailed(FirebaseException e) {
                // ...
            }
        })
        .build();
PhoneAuthProvider.verifyPhoneNumber(options);

Kotlin+KTX

val phoneNum = "+16505554567"
val testVerificationCode = "123456"

// Whenever verification is triggered with the whitelisted number,
// provided it is not set for auto-retrieval, onCodeSent will be triggered.
val options = PhoneAuthOptions.newBuilder(Firebase.auth)
        .setPhoneNumber(phoneNum)
        .setTimeout(30L, TimeUnit.SECONDS)
        .setActivity(this)
        .setCallbacks(object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

            override fun onCodeSent(
                    verificationId: String,
                    forceResendingToken: PhoneAuthProvider.ForceResendingToken
            ) {
                // Save the verification id somewhere
                // ...

                // The corresponding whitelisted code above should be used to complete sign-in.
                this@MainActivity.enableUserManuallyInputCode()
            }

            override fun onVerificationCompleted(phoneAuthCredential: PhoneAuthCredential) {
                // Sign in with the credential
                // ...
            }

            override fun onVerificationFailed(e: FirebaseException) {
                // ...
            }
        })
        .build()
PhoneAuthProvider.verifyPhoneNumber(options)

さらに、 setAutoRetrievedSmsCodeForPhoneNumberを呼び出して、架空の番号とそれに対応する自動取得用の確認コードを設定することで、Android で自動取得フローをテストできます。

verifyPhoneNumberが呼び出されると、直接onVerificationCompletedPhoneAuthCredentialがトリガーされます。これは、架空の電話番号でのみ機能します。

アプリケーションを Google Play ストアに公開するときは、これが無効になっており、アプリケーションに架空の電話番号がハードコーディングされていないことを確認してください。

Java

// The test phone number and code should be whitelisted in the console.
String phoneNumber = "+16505554567";
String smsCode = "123456";

FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
FirebaseAuthSettings firebaseAuthSettings = firebaseAuth.getFirebaseAuthSettings();

// Configure faking the auto-retrieval with the whitelisted numbers.
firebaseAuthSettings.setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber, smsCode);

PhoneAuthOptions options = PhoneAuthOptions.newBuilder(firebaseAuth)
        .setPhoneNumber(phoneNumber)
        .setTimeout(60L, TimeUnit.SECONDS)
        .setActivity(this)
        .setCallbacks(new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            @Override
            public void onVerificationCompleted(PhoneAuthCredential credential) {
                // Instant verification is applied and a credential is directly returned.
                // ...
            }

            // ...
        })
        .build();
PhoneAuthProvider.verifyPhoneNumber(options);

Kotlin+KTX

// The test phone number and code should be whitelisted in the console.
val phoneNumber = "+16505554567"
val smsCode = "123456"

val firebaseAuth = Firebase.auth
val firebaseAuthSettings = firebaseAuth.firebaseAuthSettings

// Configure faking the auto-retrieval with the whitelisted numbers.
firebaseAuthSettings.setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber, smsCode)

val options = PhoneAuthOptions.newBuilder(firebaseAuth)
        .setPhoneNumber(phoneNumber)
        .setTimeout(60L, TimeUnit.SECONDS)
        .setActivity(this)
        .setCallbacks(object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            override fun onVerificationCompleted(credential: PhoneAuthCredential) {
                // Instant verification is applied and a credential is directly returned.
                // ...
            }

            // ...
        })
        .build()
PhoneAuthProvider.verifyPhoneNumber(options)

次のステップ

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

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

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

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

ユーザーをサインアウトするには、 signOutを呼び出します。

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()