Catch up on everything we announced at this year's Firebase Summit. Learn more

Authentifizieren Sie sich bei Firebase auf Android mithilfe einer Telefonnummer

Sie können Firebase Authentication verwenden, um einen Benutzer anzumelden, indem Sie eine SMS-Nachricht an das Telefon des Benutzers senden. Der Benutzer meldet sich mit einem Einmalcode an, der in der SMS-Nachricht enthalten ist.

Der einfachste Weg , Telefonnummer Sign-in hinzufügen , um Ihre Anwendung verwenden FirebaseUI , die ein Drop-in beinhaltet Anmelde-Widget , dass Geräte-Anmeldeströme für Telefonnummer Sign-in, sowie Passwort-basierte und föderierte Zeichen -in. In diesem Dokument wird beschrieben, wie Sie mit dem Firebase SDK einen Anmeldevorgang für eine Telefonnummer implementieren.

Bevor Sie beginnen

  1. Wenn Sie nicht bereits haben, fügen Sie Firebase zu dem Android - Projekt .
  2. Mit Hilfe der Firebase Android BoM , erklärt die Abhängigkeit für die Firebase Authentifizierung Android - Bibliothek in Ihrem Modul (app-Ebene) Gradle Datei ( in der Regel app/build.gradle ).

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.1')
    
        // Declare 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'
    }
    

    Durch die Verwendung des Firebase Android BoM werden, Ihre App immer kompatible Versionen der Firebase Android - Bibliotheken verwenden.

    (Alternative) Deklarieren Firebase Bibliothek Abhängigkeiten , ohne die BoM mit

    Wenn Sie die Firebase-Stückliste nicht verwenden möchten, müssen Sie jede Firebase-Bibliotheksversion in ihrer Abhängigkeitszeile angeben.

    Beachten Sie, dass , wenn Sie mehrere Firebase Bibliotheken in Ihrer Anwendung verwenden wir mit der BoM empfehlen Bibliothek Versionen zu verwalten, die sicherstellt , dass alle Versionen kompatibel sind.

    dependencies {
        // Declare 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.0.1'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:29.0.1')
    
        // Declare 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'
    }
    

    Durch die Verwendung des Firebase Android BoM werden, Ihre App immer kompatible Versionen der Firebase Android - Bibliotheken verwenden.

    (Alternative) Deklarieren Firebase Bibliothek Abhängigkeiten , ohne die BoM mit

    Wenn Sie die Firebase-Stückliste nicht verwenden möchten, müssen Sie jede Firebase-Bibliotheksversion in ihrer Abhängigkeitszeile angeben.

    Beachten Sie, dass , wenn Sie mehrere Firebase Bibliotheken in Ihrer Anwendung verwenden wir mit der BoM empfehlen Bibliothek Versionen zu verwalten, die sicherstellt , dass alle Versionen kompatibel sind.

    dependencies {
        // Declare 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.0.1'
    }
    
  3. Wenn Sie noch nicht Ihre App auf Ihr Projekt verbunden Firebase, tun Sie dies aus der Firebase Konsole .
  4. Wenn Sie nicht bereits die App SHA-1 - Hash in der eingestellten Firebase Konsole , dazu. Siehe Authentifizieren Your Client für Informationen zu Ihrem App SHA-1 - Hash zu finden.

Sicherheitsbedenken

Die Authentifizierung mit nur einer Telefonnummer ist zwar bequem, aber weniger sicher als die anderen verfügbaren Methoden, da der Besitz einer Telefonnummer leicht zwischen Benutzern übertragen werden kann. Außerdem kann sich auf Geräten mit mehreren Benutzerprofilen jeder Benutzer, der SMS-Nachrichten empfangen kann, mit der Telefonnummer des Geräts bei einem Konto anmelden.

Wenn Sie die telefonnummernbasierte Anmeldung in Ihrer App verwenden, sollten Sie diese neben sichereren Anmeldemethoden anbieten und die Benutzer über die Sicherheitsabwägungen bei der Verwendung der Telefonnummernanmeldung informieren.

Aktivieren Sie die Telefonnummern-Anmeldung für Ihr Firebase-Projekt

Um Benutzer per SMS anzumelden, müssen Sie zunächst die Anmeldemethode Telefonnummer für Ihr Firebase-Projekt aktivieren:

  1. In der Firebase Konsole öffnen den Abschnitt Authentication.
  2. Auf der Sign-in - Methode Seite, aktivieren Sie die Telefonnummer Anmelde-Verfahren.

Das Kontingent von Firebase-Anmeldeanfragen für Telefonnummern ist hoch genug, sodass die meisten Apps nicht betroffen sind. Wenn Sie jedoch eine sehr große Anzahl von Benutzern mit Telefonauthentifizierung anmelden müssen, müssen Sie möglicherweise Ihren Preisplan aktualisieren. Siehe die Preisseite.

App-Überprüfung aktivieren

Damit Sie die Telefonnummerauthentifizierung verwenden können, muss Firebase in der Lage sein, zu überprüfen, ob von Ihrer App Anmeldeanfragen für Telefonnummern stammen. Firebase Authentication kann dies auf zwei Arten erreichen:

  • SafetyNet: Wenn ein Benutzer ein Gerät mit Google Play Services installiert ist , und Firebase Authentifizierung kann das Gerät als legitim mit verifizieren Android SafetyNet , Telefonnummer-Anmeldung kann weitergehen.
  • So aktivieren Sie SafetyNet für die Verwendung mit Firebase Authentication:

    1. In der Google Cloud Console, aktivieren Sie die Android DeviceCheck API für Ihr Projekt. Der standardmäßige Firebase-API-Schlüssel wird verwendet und muss auf die DeviceCheck-API zugreifen dürfen.
    2. Wenn Sie noch nicht Ihre App SHA-256 Fingerabdruck angegeben, tun Sie dies aus der Einstellungsseite der Konsole Firebase. Siehe Authentifizieren Your Client für Details, wie der App SHA-256 Fingerabdruck zu erhalten.
  • reCAPTCHA Prüfung: Für den Fall , dass SafetyNet kann nicht verwendet werden, wie zum Beispiel , wenn der Benutzer nicht über Play Services Google unterstützt, oder wenn Ihre Anwendung auf einem Emulator testen, Firebase - Authentifizierung verwendet eine reCAPTCHA Überprüfung die Telefon-Anmeldung Flow abzuschließen. Die reCAPTCHA-Challenge kann oft abgeschlossen werden, ohne dass der Nutzer etwas lösen muss. Bitte beachten Sie, dass dieser Ablauf erfordert, dass Ihrer Anwendung ein SHA-1 zugeordnet ist.

Senden Sie einen Bestätigungscode an das Telefon des Benutzers

Um die Anmeldung über die Telefonnummer zu initiieren, präsentieren Sie dem Benutzer eine Benutzeroberfläche, die ihn auffordert, seine Telefonnummer einzugeben. Die rechtlichen Anforderungen variieren, aber als Best Practice und um die Erwartungen Ihrer Benutzer zu erfüllen, sollten Sie sie darüber informieren, dass sie bei der telefonischen Anmeldung möglicherweise eine SMS-Nachricht zur Bestätigung erhalten und Standardtarife gelten.

Dann gibt ihre Telefonnummer an die PhoneAuthProvider.verifyPhoneNumber Verfahren zu beantragen , dass Firebase der Telefonnummer des Benutzers überprüfen. Zum Beispiel:

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)

Die verifyPhoneNumber Methode ist einspringenden: Wenn Sie es mehrmals aufrufen, wie in einem der Aktivität onStart Methode, die verifyPhoneNumber Methode nicht eine zweite SMS es sei denn , die ursprüngliche Anforderung aus abgelaufen senden.

Sie können dieses Verhalten verwenden, um den Anmeldevorgang für die Telefonnummer fortzusetzen, wenn Ihre App geschlossen wird, bevor sich der Benutzer anmelden kann (z. B. während der Benutzer seine SMS-App verwendet). Nachdem Sie rufen verifyPhoneNumber , einen Flag , die Überprüfung im Gang anzeigt. Speichern Sie dann die Flagge in der Ihre Aktivität onSaveInstanceState Methode und Wiederherstellen der Flagge in onRestoreInstanceState . Schließlich wird in der Ihre Aktivität onStart Methode überprüfen , ob Überprüfung bereits im Gange ist, und wenn ja, nennen verifyPhoneNumber wieder. Achten Sie darauf , das Flag zu löschen , wenn die Überprüfung abgeschlossen ist oder nicht (siehe Verification Rückrufe ).

Zum einfachen Bildschirm - Rotation und andere Instanzen Aktivität neu gestartet wird , gibt Ihre Aktivität an den Griff verifyPhoneNumber Methode. Die Rückrufe werden automatisch getrennt, wenn die Aktivität beendet wird, sodass Sie UI-Übergangscode frei in die Rückrufmethoden schreiben können.

Die SMS - Nachricht von Firebase gesendet werden , kann auch durch die Angabe der Auth - Sprache über die lokalisiert wird setLanguageCode Methode auf Ihrer Auth - Instanz.

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()

Wenn Sie anrufen PhoneAuthProvider.verifyPhoneNumber , müssen Sie auch eine Instanz bieten OnVerificationStateChangedCallbacks , die Implementierungen der Callback - Funktionen enthält , die die Ergebnisse der Anfrage behandeln. Zum Beispiel:

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
    }
}

Rückrufe zur Bestätigung

In den meisten Anwendungen implementieren Sie die onVerificationCompleted , onVerificationFailed und onCodeSent Rückrufe. Sie könnten auch implementieren onCodeAutoRetrievalTimeOut , je nach Anforderungen Ihrer App.

onVerificationCompleted(PhoneAuthCredential)

Diese Methode wird in zwei Situationen aufgerufen:

  • Sofortige Verifizierung: In einigen Fällen kann die Telefonnummer sofort verifiziert werden, ohne dass ein Verifizierungscode gesendet oder eingegeben werden muss.
  • Automatischer Abruf: Auf einigen Geräten können die Google Play-Dienste die eingehende Verifizierungs-SMS automatisch erkennen und die Verifizierung ohne Benutzeraktion durchführen. (Diese Fähigkeit könnte mit einigen Trägern nicht verfügbar sein.) Das den uses SMS Retriever API , die am Ende der SMS - Nachricht einen 11 - Zeichen - Hash umfasst.
In jedem Fall hat die Telefonnummer des Benutzers erfolgreich verifiziert wurde, und Sie können die Verwendung PhoneAuthCredential Objekt , das an den Rückruf übergeben wird in den Benutzer anmelden .

onVerificationFailed(FirebaseException)

Diese Methode wird als Reaktion auf eine ungültige Verifizierungsanfrage aufgerufen, beispielsweise eine Anfrage, die eine ungültige Telefonnummer oder einen ungültigen Verifizierungscode angibt.

onCodeSent(String-Überprüfungs-Id, PhoneAuthProvider.ForceResendingToken)

Optional. Diese Methode wird aufgerufen, nachdem der Verifizierungscode per SMS an die angegebene Telefonnummer gesendet wurde.

Wenn diese Methode aufgerufen wird, zeigen die meisten Apps eine Benutzeroberfläche an, die den Benutzer auffordert, den Bestätigungscode aus der SMS-Nachricht einzugeben. (Zur gleichen Zeit, Auto-Überprüfung könnte im Hintergrund fortfahren.) Dann wird , nachdem der Benutzer tippt den Bestätigungscode ein , können Sie den Bestätigungs - Code und die Überprüfung ID verwenden , die an die Methode übergeben wurden ein erstellen PhoneAuthCredential Objekt, das Sie können den Benutzer wiederum mit anmelden. Einige Anwendungen könnten jedoch warten , bis onCodeAutoRetrievalTimeOut vor der Anzeige des Bestätigungscode UI aufgerufen wird (nicht empfohlen).

onCodeAutoRetrievalTimeOut(String-Überprüfungs-Id)

Optional. Diese Methode wird aufgerufen, nachdem die Timeout - Zeitdauer zu vorgegebenen verifyPhoneNumber ohne passiert hat onVerificationCompleted Triggern zuerst. Bei Geräten ohne SIM-Karte wird diese Methode sofort aufgerufen, da kein automatischer SMS-Abruf möglich ist.

Einige Apps blockieren Benutzereingaben, bis der Zeitraum für die automatische Überprüfung abgelaufen ist, und zeigen erst dann eine Benutzeroberfläche an, die den Benutzer auffordert, den Bestätigungscode aus der SMS-Nachricht einzugeben (nicht empfohlen).

Erstellen Sie ein PhoneAuthCredential-Objekt

Nachdem der Benutzer den Bestätigungscode eingibt , dass Firebase an das Telefon des Benutzers gesendet, erstellen Sie ein PhoneAuthCredential Objekt, den Bestätigungscode und die Überprüfung ID verwenden , die auf den übergeben wurden onCodeSent oder onCodeAutoRetrievalTimeOut Rückruf. (Wenn onVerificationCompleted genannt wird, erhalten Sie ein PhoneAuthCredential Objekt direkt, so dass Sie diesen Schritt überspringen.)

Um das Erstellen PhoneAuthCredential Objekt, rufen PhoneAuthProvider.getCredential :

Java

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

Kotlin+KTX

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

Melden Sie sich als Benutzer an

Nachdem Sie einen bekommen PhoneAuthCredential Objekt, sei es in onVerificationCompleted Rückruf oder telefonisch PhoneAuthProvider.getCredential , füllen Sie das Anmelde-Fluss durch die vorbeizieh PhoneAuthCredential Objekt 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
                }
            }
}

Test mit fiktiven Telefonnummern

Sie können über die Firebase-Konsole fiktive Telefonnummern für die Entwicklung einrichten. Das Testen mit fiktiven Telefonnummern bietet folgende Vorteile:

  • Testen Sie die Authentifizierung der Telefonnummer, ohne Ihr Nutzungskontingent zu verbrauchen.
  • Testen Sie die Authentifizierung der Telefonnummer, ohne eine tatsächliche SMS-Nachricht zu senden.
  • Führen Sie aufeinanderfolgende Tests mit derselben Telefonnummer durch, ohne gedrosselt zu werden. Dadurch wird das Risiko einer Ablehnung während des Überprüfungsprozesses im App Store minimiert, wenn der Prüfer zufällig dieselbe Telefonnummer zum Testen verwendet.
  • Testen Sie problemlos in Entwicklungsumgebungen ohne zusätzlichen Aufwand, z. B. die Möglichkeit, in einem iOS-Simulator oder einem Android-Emulator ohne Google Play-Dienste zu entwickeln.
  • Schreiben Sie Integrationstests, ohne durch Sicherheitsprüfungen blockiert zu werden, die normalerweise auf echte Telefonnummern in einer Produktionsumgebung angewendet werden.

Fiktive Telefonnummern müssen diese Anforderungen erfüllen:

  1. Stellen Sie sicher, dass Sie Telefonnummern verwenden, die tatsächlich fiktiv sind und noch nicht existieren. Firebase Authentication ermöglicht es Ihnen nicht, vorhandene Telefonnummern, die von echten Benutzern verwendet werden, als Testnummern festzulegen. Eine Option ist 555 Präfix Zahlen als US Test Telefonnummern zu verwenden, zum Beispiel: +1 650-555-3434
  2. Telefonnummern müssen hinsichtlich Länge und anderen Einschränkungen korrekt formatiert sein. Sie durchlaufen weiterhin dieselbe Überprüfung wie die Telefonnummer eines echten Benutzers.
  3. Sie können bis zu 10 Telefonnummern für die Entwicklung hinzufügen.
  4. Verwenden Sie schwer zu erratende Testtelefonnummern/Codes und ändern Sie diese häufig.

Erstelle fiktive Telefonnummern und Bestätigungscodes

  1. In der Firebase Konsole öffnen den Abschnitt Authentication.
  2. Im Zeichen in Verfahren Registerkarte, aktivieren Sie die Telefonanbieter , wenn Sie nicht bereits haben.
  3. Öffnen Sie die Telefonnummern für die Prüfung Akkordeon - Menü.
  4. Geben Sie die Telefonnummer , die Sie testen möchten, zum Beispiel: +1 650-555-3434.
  5. Geben Sie den 6-stelligen Bestätigungscode für die jeweilige Nummer, zum Beispiel: 654.321.
  6. Fügen Sie die Nummer. Bei Bedarf können Sie die Telefonnummer und ihren Code löschen, indem Sie mit der Maus über die entsprechende Zeile fahren und auf das Papierkorbsymbol klicken.

Manuelle Prüfung

Sie können direkt eine fiktive Telefonnummer in Ihrer Bewerbung verwenden. Auf diese Weise können Sie während der Entwicklungsphase manuelle Tests durchführen, ohne auf Kontingentprobleme oder Drosselung zu stoßen. Sie können auch direkt von einem iOS-Simulator oder Android-Emulator testen, ohne dass Google Play Services installiert ist.

Wenn Sie die fiktive Telefonnummer angeben und den Bestätigungscode senden, wird keine eigentliche SMS gesendet. Stattdessen müssen Sie den zuvor konfigurierten Bestätigungscode angeben, um die Anmeldung abzuschließen.

Nach Abschluss der Anmeldung wird ein Firebase-Benutzer mit dieser Telefonnummer erstellt. Der Benutzer hat dasselbe Verhalten und dieselben Eigenschaften wie ein echter Telefonnummernbenutzer und kann auf dieselbe Weise auf Realtime Database/Cloud Firestore und andere Dienste zugreifen. Der während dieses Vorgangs geprägte ID-Token hat die gleiche Signatur wie ein echter Telefonnummernbenutzer.

Eine weitere Möglichkeit ist eine Test Rolle festgelegt über benutzerdefinierte Ansprüche auf diesem Benutzer sie als gefälschten Benutzer zu unterscheiden , wenn Sie den Zugriff weiter einschränken mögen.

Um manuell auslösen , die zum Testen ReCAPTCHA fließen, verwenden , um das forceRecaptchaFlowForTesting() Methode.

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

Integrationstests

Zusätzlich zu manuellen Tests bietet Firebase Authentication APIs, mit denen Sie Integrationstests für Telefonauthentifizierungstests schreiben können. Diese APIs deaktivieren die App-Überprüfung, indem sie die reCAPTCHA-Anforderung im Web und stille Push-Benachrichtigungen in iOS deaktivieren. Dies macht Automatisierungstests in diesen Flows möglich und einfacher zu implementieren. Darüber hinaus bieten sie die Möglichkeit, sofortige Überprüfungsabläufe auf Android zu testen.

Auf Android - Anruf setAppVerificationDisabledForTesting() vor dem signInWithPhoneNumber Anruf. Dadurch wird die App-Verifizierung automatisch deaktiviert, sodass Sie die Telefonnummer übergeben können, ohne sie manuell zu lösen. Beachten Sie, dass die Anmeldung trotz der Deaktivierung von reCAPTCHA und/oder SafetyNet bei Verwendung einer echten Telefonnummer fehlschlägt. Mit dieser API können nur fiktive Telefonnummern verwendet werden.

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

Der Aufruf verifyPhoneNumber mit einer fiktiven Nummer löst den onCodeSent Rückruf, in dem Sie den entsprechenden Bestätigungscode zur Verfügung zu stellen benötigen. Dies ermöglicht das Testen in Android-Emulatoren.

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)

Darüber hinaus können Sie automatischen Abruf Ströme in Android testen , indem die fiktive Nummer und den entsprechenden Bestätigungscode für die automatischen Abruf Einstellung durch den Aufruf setAutoRetrievedSmsCodeForPhoneNumber .

Wenn verifyPhoneNumber genannt wird, löst es onVerificationCompleted mit dem PhoneAuthCredential direkt. Dies funktioniert nur mit fiktiven Telefonnummern.

Stellen Sie sicher, dass dies deaktiviert ist und keine fiktiven Telefonnummern in Ihrer App festcodiert sind, wenn Sie Ihre Anwendung im Google Play Store veröffentlichen.

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)

Nächste Schritte

Nachdem sich ein Benutzer zum ersten Mal anmeldet, wird ein neues Benutzerkonto erstellt und mit den Anmeldeinformationen – d. h. Benutzername und Kennwort, Telefonnummer oder Authentifizierungsanbieterinformationen – verknüpft, mit denen sich der Benutzer angemeldet hat. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Benutzer in jeder App in Ihrem Projekt zu identifizieren, unabhängig davon, wie sich der Benutzer anmeldet.

  • In Ihren Anwendungen können Sie die Benutzerprofilgrundinformationen aus dem bekommen FirebaseUser Objekt. Siehe Benutzer verwalten .

  • In Ihrer Datenbank und Firebase Realtime Cloud Storage Sicherheitsregeln , können Sie die angemeldeten Nutzer die eindeutige Benutzer - ID aus der bekommen auth Variable, und es verwenden , um steuern kann ein Benutzer Zugriff , welche Daten.

Sie können Benutzer erlauben , durch mehrere Authentifizierungsanbieter anmelden, um Ihre App Verknüpfung Auth - Provider - Anmeldeinformationen zu einem vorhandenen Benutzerkonto.

Um einen Benutzer abzumelden, rufen signOut :

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()