Fügen Sie Ihrer Android-App mit FirebaseUI ganz einfach eine Anmeldung hinzu

FirebaseUI ist eine Bibliothek, die auf dem Firebase Authentication SDK aufbaut und Drop-in-UI-Flows zur Verwendung in Ihrer App bereitstellt. FirebaseUI bietet die folgenden Vorteile:

  • Mehrere Anbieter – Anmeldeabläufe für E-Mail/Passwort, E-Mail-Link, Telefonauthentifizierung, Google-Anmeldung, Facebook-Anmeldung, Twitter-Anmeldung und GitHub-Anmeldung.
  • Kontoverwaltung – Abläufe zur Abwicklung von Kontoverwaltungsaufgaben, wie z. B. Kontoerstellung und Kennwortzurücksetzungen.
  • Kontoverknüpfung – Abläufe zur sicheren Verknüpfung von Benutzerkonten über Identitätsanbieter hinweg.
  • Upgrade für anonyme Benutzer - Flows zum sicheren Upgrade anonymer Benutzer.
  • Benutzerdefinierte Designs – Passen Sie das Aussehen von FirebaseUI an Ihre App an. Da FirebaseUI Open Source ist, können Sie das Projekt forken und genau an Ihre Bedürfnisse anpassen.
  • Smart Lock for Passwords – automatische Integration mit Smart Lock for Passwords für eine schnelle geräteübergreifende Anmeldung.

Bevor Sie beginnen

  1. Fügen Sie Ihrem Android-Projekt Firebase hinzu , falls Sie dies noch nicht getan haben .

  2. Fügen Sie die Abhängigkeiten für FirebaseUI zu Ihrer build.gradle Datei auf App-Ebene hinzu. Wenn Sie die Anmeldung mit Facebook oder Twitter unterstützen möchten, schließen Sie auch die Facebook- und Twitter-SDKs ein:

    dependencies {
        // ...
    
        implementation 'com.firebaseui:firebase-ui-auth:7.2.0'
    
        // Required only if Facebook login support is required
        // Find the latest Facebook SDK releases here: https://goo.gl/Ce5L94
        implementation 'com.facebook.android:facebook-android-sdk:8.x'
    }
    

    Das FirebaseUI Auth SDK hat transitive Abhängigkeiten vom Firebase SDK und dem Google Play Services SDK.

  3. Öffnen Sie in der Firebase-Konsole den Abschnitt Authentifizierung und aktivieren Sie die Anmeldemethoden, die Sie unterstützen möchten. Einige Anmeldemethoden erfordern zusätzliche Informationen, die normalerweise in der Entwicklerkonsole des Diensts verfügbar sind.

  4. Wenn Sie die Google-Anmeldung aktiviert haben:

    1. Wenn Sie in der Konsole dazu aufgefordert werden, laden Sie die aktualisierte Firebase-Konfigurationsdatei ( google-services.json ) herunter, die jetzt die für die Google-Anmeldung erforderlichen OAuth-Client-Informationen enthält.

    2. Verschieben Sie diese aktualisierte Konfigurationsdatei in Ihr Android Studio-Projekt und ersetzen Sie die inzwischen veraltete entsprechende Konfigurationsdatei. (Siehe Firebase zu Ihrem Android-Projekt hinzufügen .)

    3. Wenn Sie den SHA-Fingerabdruck Ihrer App noch nicht angegeben haben, tun Sie dies auf der Seite „Einstellungen“ der Firebase-Konsole. Weitere Informationen zum Abrufen des SHA-Fingerabdrucks Ihrer App finden Sie unter Authentifizierung Ihres Clients .

  5. Wenn Sie die Anmeldung mit Facebook oder Twitter unterstützen, fügen Sie String-Ressourcen zu strings.xml hinzu, die die Identifizierungsinformationen angeben, die von jedem Anbieter benötigt werden:

    
    <resources>
      <!-- Facebook application ID and custom URL scheme (app ID prefixed by 'fb'). -->
      <string name="facebook_application_id" translatable="false">YOUR_APP_ID</string>
      <string name="facebook_login_protocol_scheme" translatable="false">fbYOUR_APP_ID</string>
    </resources>
    

anmelden

Erstellen Sie einen ActivityResultLauncher , der einen Rückruf für den Ergebnisvertrag der FirebaseUI-Aktivität registriert:

Kotlin+KTX

// See: https://developer.android.com/training/basics/intents/result
private val signInLauncher = registerForActivityResult(
    FirebaseAuthUIActivityResultContract(),
) { res ->
    this.onSignInResult(res)
}

Java

// See: https://developer.android.com/training/basics/intents/result
private final ActivityResultLauncher<Intent> signInLauncher = registerForActivityResult(
        new FirebaseAuthUIActivityResultContract(),
        new ActivityResultCallback<FirebaseAuthUIAuthenticationResult>() {
            @Override
            public void onActivityResult(FirebaseAuthUIAuthenticationResult result) {
                onSignInResult(result);
            }
        }
);

Um den FirebaseUI-Anmeldeablauf zu starten, erstellen Sie eine Anmeldeabsicht mit Ihren bevorzugten Anmeldemethoden:

Kotlin+KTX

// Choose authentication providers
val providers = arrayListOf(
    AuthUI.IdpConfig.EmailBuilder().build(),
    AuthUI.IdpConfig.PhoneBuilder().build(),
    AuthUI.IdpConfig.GoogleBuilder().build(),
    AuthUI.IdpConfig.FacebookBuilder().build(),
    AuthUI.IdpConfig.TwitterBuilder().build(),
)

// Create and launch sign-in intent
val signInIntent = AuthUI.getInstance()
    .createSignInIntentBuilder()
    .setAvailableProviders(providers)
    .build()
signInLauncher.launch(signInIntent)

Java

// Choose authentication providers
List<AuthUI.IdpConfig> providers = Arrays.asList(
        new AuthUI.IdpConfig.EmailBuilder().build(),
        new AuthUI.IdpConfig.PhoneBuilder().build(),
        new AuthUI.IdpConfig.GoogleBuilder().build(),
        new AuthUI.IdpConfig.FacebookBuilder().build(),
        new AuthUI.IdpConfig.TwitterBuilder().build());

// Create and launch sign-in intent
Intent signInIntent = AuthUI.getInstance()
        .createSignInIntentBuilder()
        .setAvailableProviders(providers)
        .build();
signInLauncher.launch(signInIntent);

Wenn der Anmeldevorgang abgeschlossen ist, erhalten Sie das Ergebnis in onSignInResult :

Kotlin+KTX

private fun onSignInResult(result: FirebaseAuthUIAuthenticationResult) {
    val response = result.idpResponse
    if (result.resultCode == RESULT_OK) {
        // Successfully signed in
        val user = FirebaseAuth.getInstance().currentUser
        // ...
    } else {
        // Sign in failed. If response is null the user canceled the
        // sign-in flow using the back button. Otherwise check
        // response.getError().getErrorCode() and handle the error.
        // ...
    }
}

Java

private void onSignInResult(FirebaseAuthUIAuthenticationResult result) {
    IdpResponse response = result.getIdpResponse();
    if (result.getResultCode() == RESULT_OK) {
        // Successfully signed in
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        // ...
    } else {
        // Sign in failed. If response is null the user canceled the
        // sign-in flow using the back button. Otherwise check
        // response.getError().getErrorCode() and handle the error.
        // ...
    }
}

Anmeldemethoden einrichten

  1. Öffnen Sie in der Firebase-Konsole den Abschnitt Authentifizierung . Aktivieren Sie auf der Registerkarte Anmeldemethode den E-Mail-/Kennwortanbieter . Beachten Sie, dass die Anmeldung per E-Mail/Passwort aktiviert sein muss, um die Anmeldung per E-Mail-Link zu verwenden.

  2. Aktivieren Sie im selben Abschnitt die Anmeldemethode E-Mail-Link (kennwortlose Anmeldung) und klicken Sie auf Speichern .

  3. Sie müssen auch dynamische Links von Firebase aktivieren, um die Anmeldung per E-Mail-Link zu verwenden. Klicken Sie in der Firebase-Konsole auf Dynamische Links unter Engage in der Navigationsleiste. Klicken Sie auf Erste Schritte und fügen Sie eine Domain hinzu. Die hier ausgewählte Domain wird in den E-Mail-Links wiedergegeben, die an Ihre Benutzer gesendet werden.

  4. Sie können die E-Mail-Link-Anmeldung in FirebaseUI aktivieren, indem Sie enableEmailLinkSignIn auf einer EmailBuilder Instanz aufrufen. Sie müssen auch ein gültiges ActionCodeSettings Objekt bereitstellen, wobei setHandleCodeInApp auf „true“ gesetzt ist. Darüber hinaus müssen Sie die URL, die Sie an setUrl übergeben, auf die Whitelist setzen, was in der Firebase-Konsole unter Authentication -> Sign in Methods -> Authorized domains erfolgen kann.

    Kotlin+KTX

    val actionCodeSettings = ActionCodeSettings.newBuilder()
        .setAndroidPackageName( // yourPackageName=
            "...", // installIfNotAvailable=
            true, // minimumVersion=
            null,
        )
        .setHandleCodeInApp(true) // This must be set to true
        .setUrl("https://google.com") // This URL needs to be whitelisted
        .build()
    
    val providers = listOf(
        EmailBuilder()
            .enableEmailLinkSignIn()
            .setActionCodeSettings(actionCodeSettings)
            .build(),
    )
    val signInIntent = AuthUI.getInstance()
        .createSignInIntentBuilder()
        .setAvailableProviders(providers)
        .build()
    signInLauncher.launch(signInIntent)

    Java

    ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder()
            .setAndroidPackageName(
                    /* yourPackageName= */ "...",
                    /* installIfNotAvailable= */ true,
                    /* minimumVersion= */ null)
            .setHandleCodeInApp(true) // This must be set to true
            .setUrl("https://google.com") // This URL needs to be whitelisted
            .build();
    
    List<AuthUI.IdpConfig> providers = Arrays.asList(
            new AuthUI.IdpConfig.EmailBuilder()
                    .enableEmailLinkSignIn()
                    .setActionCodeSettings(actionCodeSettings)
                    .build()
    );
    Intent signInIntent = AuthUI.getInstance()
            .createSignInIntentBuilder()
            .setAvailableProviders(providers)
            .build();
    signInLauncher.launch(signInIntent);
  5. Wenn Sie den Link in einer bestimmten Aktivität abrufen möchten, befolgen Sie bitte die hier beschriebenen Schritte . Andernfalls leitet der Link zu Ihrer Launcher-Aktivität weiter.

  6. Sobald Sie den Deep-Link erkannt haben, müssen Sie telefonisch bestätigen, dass wir ihn für Sie handhaben können. Wenn wir können, müssen Sie es dann über setEmailLink an uns weitergeben.

    Kotlin+KTX

    if (AuthUI.canHandleIntent(intent)) {
        val extras = intent.extras ?: return
        val link = extras.getString("email_link_sign_in")
        if (link != null) {
            val signInIntent = AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setEmailLink(link)
                .setAvailableProviders(providers)
                .build()
            signInLauncher.launch(signInIntent)
        }
    }

    Java

    if (AuthUI.canHandleIntent(getIntent())) {
        if (getIntent().getExtras() == null) {
            return;
        }
        String link = getIntent().getExtras().getString("email_link_sign_in");
        if (link != null) {
            Intent signInIntent = AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setEmailLink(link)
                    .setAvailableProviders(providers)
                    .build();
            signInLauncher.launch(signInIntent);
        }
    }
  7. Die optionale geräteübergreifende E-Mail-Link-Anmeldung wird unterstützt, was bedeutet, dass der über Ihre Android-App gesendete Link verwendet werden kann, um sich bei Ihren Web- oder Apple-Apps anzumelden. Standardmäßig ist die geräteübergreifende Unterstützung aktiviert. Sie können es deaktivieren, indem Sie setForceSameDevice auf der EmailBuilder Instanz aufrufen.

    Weitere Informationen finden Sie unter FirebaseUI-Web und FirebaseUI-iOS .

Austragen

FirebaseUI bietet bequeme Methoden zum Abmelden von der Firebase-Authentifizierung sowie von allen Anbietern sozialer Identitäten:

Kotlin+KTX

AuthUI.getInstance()
    .signOut(this)
    .addOnCompleteListener {
        // ...
    }

Java

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Sie können das Konto des Benutzers auch vollständig löschen:

Kotlin+KTX

AuthUI.getInstance()
    .delete(this)
    .addOnCompleteListener {
        // ...
    }

Java

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Anpassung

Standardmäßig verwendet FirebaseUI AppCompat für das Design, was bedeutet, dass es natürlich das Farbschema Ihrer App übernimmt. Wenn Sie weitere Anpassungen benötigen, können Sie ein Design und ein Logo an den Sign-in Intent Builder übergeben:

Kotlin+KTX

val signInIntent = AuthUI.getInstance()
    .createSignInIntentBuilder()
    .setAvailableProviders(providers)
    .setLogo(R.drawable.my_great_logo) // Set logo drawable
    .setTheme(R.style.MySuperAppTheme) // Set theme
    .build()
signInLauncher.launch(signInIntent)

Java

Intent signInIntent = AuthUI.getInstance()
        .createSignInIntentBuilder()
        .setAvailableProviders(providers)
        .setLogo(R.drawable.my_great_logo)      // Set logo drawable
        .setTheme(R.style.MySuperAppTheme)      // Set theme
        .build();
signInLauncher.launch(signInIntent);

Sie können auch eine benutzerdefinierte Datenschutzrichtlinie und Nutzungsbedingungen festlegen:

Kotlin+KTX

val signInIntent = AuthUI.getInstance()
    .createSignInIntentBuilder()
    .setAvailableProviders(providers)
    .setTosAndPrivacyPolicyUrls(
        "https://example.com/terms.html",
        "https://example.com/privacy.html",
    )
    .build()
signInLauncher.launch(signInIntent)

Java

Intent signInIntent = AuthUI.getInstance()
        .createSignInIntentBuilder()
        .setAvailableProviders(providers)
        .setTosAndPrivacyPolicyUrls(
                "https://example.com/terms.html",
                "https://example.com/privacy.html")
        .build();
signInLauncher.launch(signInIntent);

Nächste Schritte

  • Weitere Informationen zur Verwendung und Anpassung von FirebaseUI finden Sie in der README -Datei auf GitHub.
  • Wenn Sie ein Problem in FirebaseUI finden und es melden möchten, verwenden Sie den GitHub Issue Tracker .