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

FirebaseUI Auth ist eine Bibliothek, die auf dem Firebase Authentication SDK basiert und Drop-in-UI-Abläufe für die Verwendung in Ihrer App bietet.

Der empfohlene Anmeldeablauf verwendet Compose-Bildschirme. Informationen zu Apps, die noch Aktivitäten verwenden, finden Sie im Abschnitt Vorhandene aktivitätsbasierte Apps.

FirebaseUI Auth bietet folgende Vorteile:

  • Mehrere Anbieter : Anmeldeabläufe für E-Mail/Passwort, Telefon, Google, Facebook, Apple, GitHub, Microsoft, Yahoo, Twitter, anonyme Authentifizierung und benutzerdefiniertes OAuth.
  • Kontoverwaltung : Abläufe zur Verwaltung von Konten, z. B. zum Erstellen von Konten und Zurücksetzen von Passwörtern.
  • Kontoverknüpfung : Abläufe zum sicheren Verknüpfen von Nutzerkonten bei verschiedenen Identitätsanbietern.
  • Upgrade für anonyme Nutzer : Abläufe zum sicheren Upgrade anonymer Nutzer.
  • Benutzerdefinierte Designs : Unterstützung für die Material 3-UI, die das Design Ihrer App übernehmen kann. Da FirebaseUI Open Source ist, können Sie das Projekt forken und es genau an Ihre Anforderungen anpassen.
  • Credential Manager – automatische Integration mit Credential Manager für eine schnelle geräteübergreifende Anmeldung.
  • Multi-Faktor-Authentifizierung : SMS- und TOTP-Unterstützung für zusätzliche Sicherheit.

Hinweis

  1. Fügen Sie Ihrem Android-Projekt Firebase hinzu, falls noch nicht geschehen.
  2. Aktivieren Sie in der Firebase Console die Anmeldemethoden, die Sie unterstützen möchten.
  3. Fügen Sie Ihrem App-Modul FirebaseUI Auth hinzu:
dependencies {
    // Check Maven Central for the latest version:
    // https://central.sonatype.com/artifact/com.firebaseui/firebase-ui-auth/versions
    implementation("com.firebaseui:firebase-ui-auth:10.0.0-beta02")

    // 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")
}

Anmeldemethoden einrichten

Google Log-in

Die Google Log-in-Konfiguration wird automatisch vom Gradle-Plug-in „google-services“ bereitgestellt. Prüfen Sie, ob Sie Google Log-in in der Firebase Console aktiviert haben.

Facebook-Login

Wenn Sie Facebook-Login verwenden, fügen Sie Ihre Facebook-App-ID zu strings.xml hinzu:

<resources>
    <string name="facebook_application_id" translatable="false">YOUR_FACEBOOK_APP_ID</string>
    <string name="facebook_login_protocol_scheme" translatable="false">fbYOUR_FACEBOOK_APP_ID</string>
    <string name="facebook_client_token" translatable="false">CHANGE-ME</string>
</resources>

Eine Einrichtungsanleitung finden Sie in der Facebook for Developers Dokumentation.

Andere Anbieter

Für die Anbieter Twitter, GitHub, Microsoft, Yahoo und Apple ist eine Konfiguration in der Firebase Console erforderlich, aber keine zusätzliche Android-spezifische Einrichtung. Anbieterspezifische Anleitungen finden Sie in der Firebase Authentication-Dokumentation.

Wählen Sie die gewünschten Anbieter in authUIConfiguration aus:

val configuration = authUIConfiguration {
    context = applicationContext
    providers {
        provider(AuthProvider.Email())
        provider(
            AuthProvider.Phone(
                defaultCountryCode = "US",
            )
        )
        provider(
            AuthProvider.Google(
                scopes = listOf("email"),
                serverClientId = null,
            )
        )
        provider(AuthProvider.Facebook())
    }
}

Die Anmeldung mit E-Mail-Link befindet sich in der Konfiguration des E-Mail-Anbieters:

val configuration = authUIConfiguration {
    context = applicationContext
    providers {
        provider(
            AuthProvider.Email(
                isEmailLinkSignInEnabled = true,
                emailLinkActionCodeSettings = actionCodeSettings {
                    url = "https://example.com/auth"
                    handleCodeInApp = true
                    setAndroidPackageName(
                        "com.example.app",
                        true,
                        null,
                    )
                },
            )
        )
    }
}

Den vollständigen Ablauf zur Verarbeitung von Deeplinks finden Sie im Abschnitt Anmeldung mit E-Mail-Link der README-Datei auf GitHub.

Anmelden

Erstellen Sie eine AuthUIConfiguration und zeigen Sie dann FirebaseAuthScreen an.

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val authUI = FirebaseAuthUI.getInstance()

        setContent {
            MyAppTheme {
                val configuration = authUIConfiguration {
                    context = applicationContext
                    theme = AuthUITheme.fromMaterialTheme()
                    providers {
                        provider(AuthProvider.Email())
                        provider(
                            AuthProvider.Google(
                                scopes = listOf("email"),
                                serverClientId = null,
                            )
                        )
                    }
                }

                if (authUI.isSignedIn()) {
                    HomeScreen()
                } else {
                    FirebaseAuthScreen(
                        configuration = configuration,
                        authUI = authUI,
                        onSignInSuccess = { result ->
                            // User signed in successfully
                        },
                        onSignInFailure = { exception ->
                            // Sign in failed
                        },
                        onSignInCancelled = {
                            finish()
                        },
                    )
                }
            }
        }
    }
}

So erhalten Sie einen vollständigen Authentifizierungsablauf mit:

  • Passwort-Authentifizierung
  • Google Log-in
  • Passwort zurücksetzen
  • Material 3-Design
  • Unterstützung für den Credential Manager
  • Fehlerbehandlung über direkte Callbacks

Abmelden

FirebaseUI Auth bietet praktische Methoden zum Abmelden und Löschen von Konten:

lifecycleScope.launch {
    FirebaseAuthUI.getInstance().signOut(applicationContext)
}
lifecycleScope.launch {
    FirebaseAuthUI.getInstance().delete(applicationContext)
}

Anpassung

FirebaseUI Auth ist anpassbar. Der einfachste Weg, um zu beginnen, ist das Festlegen eines Designs direkt in authUIConfiguration:

val configuration = authUIConfiguration {
    context = applicationContext
    providers {
        provider(AuthProvider.Email())
        provider(AuthProvider.Google(scopes = listOf("email"), serverClientId = null))
    }
    theme = AuthUITheme.Adaptive
}

Weitere Möglichkeiten:

  • AuthUITheme.Default, AuthUITheme.DefaultDark oder AuthUITheme.Adaptive verwenden
  • Das Design Ihrer App mit AuthUITheme.fromMaterialTheme() übernehmen
  • Das Standarddesign mit .copy() anpassen
  • Ein vollständig benutzerdefiniertes AuthUITheme erstellen
  • Ein Logo, eine URL zu den Nutzungsbedingungen und eine URL zur Datenschutzerklärung in authUIConfiguration festlegen

Vollständige Informationen zu Designs und Anpassungen, einschließlich der Designpriorität, des Designs von Anbieterbuttons und benutzerdefinierter Designs, finden Sie in the Theming and Customization section of the readme in GitHub.

Vorhandene aktivitätsbasierte Apps

Wenn Ihre App noch Aktivitäten und die Activity Result API verwendet, können Sie einen aktivitätsbasierten Startablauf beibehalten, indem Sie AuthFlowController verwenden:

private val authLauncher = registerForActivityResult(
    ActivityResultContracts.StartActivityForResult(),
) { result ->
    if (result.resultCode == RESULT_OK) {
        val user = FirebaseAuth.getInstance().currentUser
        // ...
    } else {
        // User cancelled or sign-in failed
    }
}

val configuration = authUIConfiguration {
    context = applicationContext
    providers {
        provider(AuthProvider.Email())
        provider(
            AuthProvider.Google(
                scopes = listOf("email"),
                serverClientId = null,
            )
        )
    }
}

val controller = FirebaseAuthUI.getInstance().createAuthFlow(configuration)
authLauncher.launch(controller.createIntent(this))