Mit FirebaseUI ganz einfach Anmeldungen zu Android-Apps hinzufügen

FirebaseUI ist eine Bibliothek, die zusätzlich zum Firebase Authentication SDK, das Drop-in-UI-Abläufe für die Verwendung bereitstellt. in Ihrer App. FirebaseUI bietet folgende Vorteile:

  • Mehrere Anbieter – Anmeldeverfahren für E-Mail-Adresse/Passwort, E-Mail-Link, Telefon Authentication, Google Log-in, Facebook Login, Twitter Login und GitHub Login.
  • Kontoverwaltung: Abläufe zur Verwaltung von Kontoaufgaben wie Kontoerstellung und Passwort zurücksetzen.
  • Kontoverknüpfung: Abläufe zur sicheren Verknüpfung von Nutzerkonten identitätsübergreifend Anbieter.
  • Upgrade für anonyme Nutzer: Abläufe für das sichere Upgrade anonymer Nutzer.
  • Benutzerdefinierte Themen: Sie können das Erscheinungsbild von FirebaseUI an Ihre App anpassen. Da FirebaseUI Open Source ist, können Sie das Projekt auch forken und genau an Ihre Anforderungen anpassen.
  • Smart Lock für Passwörter – automatische Integration mit Smart Lock für Passwörter für eine schnelle geräteübergreifende Anmeldung.

Hinweis

  1. Falls noch nicht geschehen, Fügen Sie Firebase zu Ihrem Android-Projekt hinzu.

  2. Fügen Sie der Datei build.gradle auf App-Ebene die Abhängigkeiten für FirebaseUI hinzu. Wenn Sie die Anmeldung über Facebook oder Twitter unterstützen möchten, fügen Sie auch den Facebook und Twitter SDKs:

    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 das Google Play Services SDK.

  3. Öffnen Sie in der Firebase-Konsole den Bereich Authentifizierung und aktivieren Sie die Anmeldemethoden an, die Sie unterstützen möchten. Einige Anmeldemethoden erfordern zusätzliche Informationen, die in der Regel beim Entwickler des Dienstes verfügbar sind .

  4. Wenn Sie Google Log-in aktiviert haben:

    1. Laden Sie die aktualisierte Firebase-Konfigurationsdatei herunter, wenn Sie in der Console dazu aufgefordert werden. (google-services.json), die jetzt die Informationen zum OAuth-Client enthält für Google Log-in erforderlich.

    2. Verschieben Sie diese aktualisierte Konfigurationsdatei in Ihr Android Studio-Projekt und ersetzen Sie sie dabei. die inzwischen veraltete Konfigurationsdatei. Weitere Informationen finden Sie unter Firebase zu meinem Android-Projekt hinzufügen.

    3. Wenn Sie den SHA-Fingerabdruck Ihrer App noch nicht angegeben haben, tun Sie dies über das Seite „Einstellungen“ der Firebase-Konsole. Siehe Client authentifizieren finden Sie weitere Informationen dazu, wie Sie den SHA-Fingerabdruck Ihrer App abrufen.

  5. Wenn Sie die Anmeldung über Facebook oder Twitter unterstützen, fügen Sie strings.xml Stringressourcen hinzu, in denen die von den einzelnen Anbietern erforderlichen Anmeldedaten angegeben sind:

    
    <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

ActivityResultLauncher erstellen, die einen Callback für die FirebaseUI registriert Vertrag über Aktivitätsergebnisse:

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-Anmeldevorgang zu starten, erstellen Sie einen Anmelde-Intent 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);

Sobald 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. Am Tab Sign in method (Anmeldemethode) den Anbieter E-Mail/Passwort ein. Hinweis Die Anmeldung mit E-Mail-Adresse und Passwort muss aktiviert sein, damit die Anmeldung per E-Mail-Link verwendet werden kann.

  2. Aktivieren Sie im selben Abschnitt die Anmeldung über E-Mail-Link (Anmeldung ohne Passwort). und klicken Sie auf Speichern.

  3. Außerdem müssen Sie Firebase Dynamic Links aktivieren, um die Anmeldung über einen E-Mail-Link zu nutzen. Im Klicken Sie in der Firebase-Konsole in der Navigationsleiste unter Interagieren auf Dynamic Links. Klicken Sie auf Jetzt starten und Domain hinzufügen Die hier ausgewählte Domain wird in der E-Mail angezeigt Links, die an Ihre Nutzer gesendet werden.

  4. Sie können die Anmeldung per E-Mail-Link in FirebaseUI aktivieren, indem Sie enableEmailLinkSignIn auf einem EmailBuilder-Instanz. Außerdem müssen Sie ein gültiges ActionCodeSettings-Objekt angeben, für das setHandleCodeInApp auf „wahr“ gesetzt ist. Außerdem müssen Sie die URL, an die Sie weiterleiten, auf die weiße Liste setzen. setUrl, was in der Firebase-Konsole unter „Authentifizierung“ -> möglich ist Anmeldemethoden -&gt; Autorisierte Domains.

    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 finden möchten, folgen Sie den hier. Andernfalls wird der Link zu Ihren Launcher-Aktivitäten weitergeleitet.

  6. Sobald Sie den Deeplink gefunden haben, müssen Sie uns telefonisch bestätigen, dass wir die Bearbeitung für Sie durchführen können. Wenn wir können, musst du es dann über setEmailLink an uns übergeben.

    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. Optional Die geräteübergreifende Anmeldung per E-Mail-Link wird unterstützt. Das bedeutet, dass der Link, der über Ihre Android-App können Sie für die Anmeldung in Ihren Web- oder Apple-Apps verwenden. Standardmäßig ist die geräteübergreifende Unterstützung aktiviert. Sie können ihn deaktivieren, indem Sie setForceSameDevice für die EmailBuilder-Instanz aufrufen.

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

Abmelden

FirebaseUI bietet praktische Methoden zum Abmelden von Firebase Authentication sowie alle Anbieter 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 Nutzers 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. das Farbschema Ihrer App zu übernehmen. Wenn Sie weitere Anpassungen benötigen, können Sie ein Design und ein Logo an den Intent-Builder für die Anmeldung ü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 Datenschutzerklärung und die 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 mit FirebaseUI finden und melden möchten, verwenden Sie den GitHub-Issue-Tracker.