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
- Fügen Sie Ihrem Android-Projekt Firebase hinzu, falls noch nicht geschehen.
- Aktivieren Sie in der Firebase Console die Anmeldemethoden, die Sie unterstützen möchten.
- 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())
}
}
Anmeldung mit E-Mail-Link
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,
)
},
)
)
}
}
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.DefaultDarkoderAuthUITheme.Adaptiveverwenden- Das Design Ihrer App mit
AuthUITheme.fromMaterialTheme()übernehmen - Das Standarddesign mit
.copy()anpassen - Ein vollständig benutzerdefiniertes
AuthUIThemeerstellen - Ein Logo, eine URL zu den Nutzungsbedingungen und eine URL zur Datenschutzerklärung in
authUIConfigurationfestlegen
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))