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 Anmeldevorgang verwendet Compose-Bildschirme. Informationen zu Apps, die weiterhin 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, Telefonnummer, Google, Facebook, Apple, GitHub, Microsoft, Yahoo, X (ehemals Twitter), anonyme Authentifizierung und benutzerdefiniertes OAuth.
  • Kontoverwaltung: Abläufe zur Verarbeitung von Kontoverwaltungsaufgaben wie Kontoerstellung und Zurücksetzen von Passwörtern.
  • Kontoverknüpfung: Abläufe zum sicheren Verknüpfen von Nutzerkonten über Identitätsanbieter hinweg.
  • Upgrade für anonyme Nutzer: Abläufe für das sichere Upgrade anonymer Nutzer.
  • Benutzerdefinierte Designs: Unterstützung für Material 3-Benutzeroberflächen, die das Design Ihrer App übernehmen können. Da FirebaseUI Open Source ist, können Sie das Projekt forken und genau an Ihre Anforderungen anpassen.
  • Credential Manager: automatische Integration in Credential Manager für eine schnelle geräteübergreifende Anmeldung.
  • Multi-Faktor-Authentifizierung: Unterstützung von SMS und TOTP für zusätzliche Sicherheit.

Hinweis

  1. Falls noch nicht geschehen, fügen Sie Ihrem Android-Projekt Firebase hinzu.
  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 über die Konfigurationsdatei google-services.json bereitgestellt. Prüfen Sie, ob Sie das Google Log-in in der Firebase-Konsole aktiviert haben.

Facebook-Anmeldung

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. Eine anbieterspezifische Anleitung finden Sie in der Firebase Auth-Dokumentation.

Wählen Sie die Anbieter aus, die Sie in authUIConfiguration verwenden möchten:

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 über E-Mail-Link befindet sich in der E-Mail-Anbieterkonfiguration:

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 für die Verarbeitung von Deeplinks finden Sie im Abschnitt zur Anmeldung über E-Mail-Links in der README-Datei auf GitHub.

Anmelden

Erstelle ein AuthUIConfiguration und zeige dann FirebaseAuthScreen.

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:

  • Passwortauthentifizierung
  • Google Log‑in
  • Passwort zurücksetzen
  • Material 3-Stil
  • Unterstützung für den Credential Manager
  • Fehlerbehandlung über direkte Rückrufe.

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 lässt sich anpassen. Am einfachsten ist es, wenn Sie ein Design direkt in authUIConfiguration festlegen:

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

Weitere Möglichkeiten:

  • Verwenden Sie AuthUITheme.Default, AuthUITheme.DefaultDark oder AuthUITheme.Adaptive.
  • App-Design mit AuthUITheme.fromMaterialTheme() übernehmen
  • Passen Sie das Standarddesign mit .copy() an.
  • Erstellen Sie eine vollständig benutzerdefinierte AuthUITheme.
  • Legen Sie in authUIConfiguration ein Logo, eine URL für die Nutzungsbedingungen und eine URL für die Datenschutzerklärung fest.

Vollständige Informationen zu Theming und Anpassung, einschließlich der Priorität von Themes, der Gestaltung von Anbieter-Buttons und benutzerdefinierten Themes, finden Sie im Abschnitt „Theming and Customization“ der Readme-Datei auf GitHub.

Vorhandene aktivitätsbasierte Apps

Wenn Ihre App weiterhin 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))