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, Telefon, Google, Facebook, Apple, GitHub, Microsoft, Yahoo, Twitter, anonyme Authentifizierung und benutzerdefiniertes OAuth.
  • Kontoverwaltung: Abläufe für die 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 zum sicheren Upgrade anonymer Nutzer.
  • Benutzerdefinierte Designs: Unterstützung für die Material 3-Benutzeroberfläche, die das Design Ihrer App übernehmen kann. Da FirebaseUI Open Source ist, können Sie das Projekt forken und genau an Ihre Anforderungen anpassen.
  • Credential Manager: Automatische Integration mit Credential Manager für die 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 google-services.json-Konfigurationsdatei bereitgestellt. Prüfen Sie, ob Sie das Google Log-in in der Firebase-Konsole 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 Dokumentation zu Facebook für Entwickler.

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

Anmelden

Erstelle eine 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-Stile
  • 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, ein Design direkt in authUIConfiguration festzulegen:

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.
  • Mit AuthUITheme.fromMaterialTheme() können Sie das App-Design ü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 Themen und Anpassungen, einschließlich der Priorität von Themen, der Gestaltung von Anbieter-Schaltflächen und benutzerdefinierten Themen, 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))