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 – Flows zur Abwicklung von Kontoverwaltungsaufgaben, wie z. B. Kontoerstellung und Passwort-Zurücksetzungen.
- Kontoverknüpfung – Abläufe zur sicheren Verknüpfung von Benutzerkonten über Identitätsanbieter hinweg.
- Upgrade anonymer Benutzer – Flows zum sicheren Upgrade anonymer Benutzer.
- Benutzerdefinierte Designs – Passen Sie das Aussehen von FirebaseUI an Ihre App an. Da FirebaseUI außerdem 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
Falls noch nicht geschehen, fügen Sie Firebase zu Ihrem Android-Projekt hinzu .
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 weist transitive Abhängigkeiten vom Firebase SDK und dem Google Play Services SDK auf.
Öffnen Sie in der Firebase-Konsole den Abschnitt „Authentifizierung“ und aktivieren Sie die Anmeldemethoden, die Sie unterstützen möchten. Für einige Anmeldemethoden sind zusätzliche Informationen erforderlich, die normalerweise in der Entwicklerkonsole des Dienstes verfügbar sind.
Wenn Sie die Google-Anmeldung aktiviert haben:
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-Clientinformationen enthält.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 .)
Wenn Sie den SHA-Fingerabdruck Ihrer App noch nicht angegeben haben, tun Sie dies auf der Seite „Einstellungen“ der Firebase-Konsole. Weitere Informationen dazu, wie Sie den SHA-Fingerabdruck Ihrer App erhalten, finden Sie unter Authentifizieren Ihres Clients .
Wenn Sie die Anmeldung mit Facebook oder Twitter unterstützen, fügen Sie String-Ressourcen zu
strings.xml
hinzu, die die von jedem Anbieter benötigten Identifikationsinformationen angeben:<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 FirebaseUI-Aktivitätsergebnisvertrag 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-Anmeldevorgang 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
Authentifizierung per E-Mail-Link
Öffnen Sie in der Firebase-Konsole den Abschnitt Authentifizierung . Aktivieren Sie auf der Registerkarte Anmeldemethode den E-Mail-/Passwort- Anbieter. Beachten Sie, dass die E-Mail-/Passwort-Anmeldung aktiviert sein muss, um die E-Mail-Link-Anmeldung zu verwenden.
Aktivieren Sie im selben Abschnitt die Anmeldemethode „E-Mail-Link (passwortlose Anmeldung)“ und klicken Sie auf „Speichern“ .
Sie müssen außerdem dynamische Firebase-Links aktivieren, um die E-Mail-Link-Anmeldung zu verwenden. Klicken Sie in der Firebase-Konsole in der Navigationsleiste unter „Aktivieren“ auf „Dynamische Links“ . Klicken Sie auf „Erste Schritte“ und fügen Sie eine Domain hinzu. Die hier ausgewählte Domain wird in den E-Mail-Links angezeigt, die an Ihre Benutzer gesendet werden.
Sie können die E-Mail-Link-Anmeldung in FirebaseUI aktivieren, indem Sie
enableEmailLinkSignIn
auf einerEmailBuilder
Instanz aufrufen. Sie müssen außerdem ein gültigesActionCodeSettings
Objekt bereitstellen, wobeisetHandleCodeInApp
auf true gesetzt ist. Darüber hinaus müssen Sie die URL, die Sie ansetUrl
übergeben, auf die Whitelist setzen. Dies kann in der Firebase-Konsole unter Authentifizierung -> Anmeldemethoden -> Autorisierte Domänen erfolgen.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);
Wenn Sie den Link in einer bestimmten Aktivität abrufen möchten, befolgen Sie bitte die hier beschriebenen Schritte. Andernfalls wird der Link zu Ihrer Launcher-Aktivität weitergeleitet.
Sobald Sie den Deep-Link gefunden haben, müssen Sie anrufen, um zu bestätigen, dass wir das für Sie erledigen können. Wenn wir können, müssen Sie es dann über
setEmailLink
an uns weiterleiten.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); } }
Die optionale geräteübergreifende E-Mail-Link-Anmeldung wird unterstützt, was bedeutet, dass der über Ihre Android-App gesendete Link zum Anmelden bei Ihren Web- oder Apple-Apps verwendet werden kann. Standardmäßig ist die geräteübergreifende Unterstützung aktiviert. Sie können es deaktivieren, indem Sie
setForceSameDevice
auf derEmailBuilder
Instanz aufrufen.Weitere Informationen finden Sie unter FirebaseUI-Web und FirebaseUI-iOS .
Abmelden
FirebaseUI bietet praktische Methoden zum Abmelden von der Firebase-Authentifizierung sowie allen sozialen Identitätsanbietern:
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 die Themengestaltung, was bedeutet, dass das Farbschema Ihrer App natürlich übernommen wird. 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 .