FirebaseUI es una biblioteca construida sobre el SDK de autenticación de Firebase que proporciona flujos de IU directos para usar en su aplicación. FirebaseUI proporciona los siguientes beneficios:
- Múltiples proveedores : flujos de inicio de sesión para correo electrónico/contraseña, enlace de correo electrónico, autenticación telefónica, inicio de sesión de Google, inicio de sesión de Facebook, inicio de sesión de Twitter e inicio de sesión de GitHub.
- Gestión de cuentas : flujos para gestionar las tareas de gestión de cuentas, como la creación de cuentas y el restablecimiento de contraseñas.
- Vinculación de cuentas : flujos para vincular de forma segura cuentas de usuario entre proveedores de identidad.
- Actualización de usuarios anónimos : flujos para actualizar de forma segura a los usuarios anónimos.
- Temas personalizados: personalice el aspecto de FirebaseUI para que coincida con su aplicación. Además, debido a que FirebaseUI es de código abierto, puede bifurcar el proyecto y personalizarlo exactamente según sus necesidades.
- Smart Lock for Passwords : integración automática con Smart Lock for Passwords para un inicio de sesión rápido entre dispositivos.
Antes de que empieces
Si aún no lo ha hecho, agregue Firebase a su proyecto de Android .
Agregue las dependencias para FirebaseUI a su archivo
build.gradle
a nivel de aplicación. Si desea admitir el inicio de sesión con Facebook o Twitter, incluya también los SDK de Facebook y Twitter: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' }
El SDK de autenticación de FirebaseUI tiene dependencias transitivas en el SDK de Firebase y el SDK de servicios de Google Play.
En Firebase console , abra la sección Autenticación y habilite los métodos de inicio de sesión que desea admitir. Algunos métodos de inicio de sesión requieren información adicional, generalmente disponible en la consola del desarrollador del servicio.
Si es compatible con el inicio de sesión de Google y aún no ha especificado la huella digital SHA-1 de su aplicación, hágalo desde la página Configuración de la consola de Firebase. Consulte Autenticación de su cliente para obtener detalles sobre cómo obtener la huella digital SHA-1 de su aplicación.
Si admite el inicio de sesión con Facebook o Twitter, agregue recursos de cadena a
strings.xml
que especifiquen la información de identificación requerida por cada proveedor:<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>
Registrarse
Cree un ActivityResultLauncher
que registre una devolución de llamada para el contrato de resultado de actividad de FirebaseUI:
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); } } );
Para iniciar el flujo de inicio de sesión de FirebaseUI, cree una intención de inicio de sesión con sus métodos de inicio de sesión preferidos:
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);
Cuando se complete el flujo de inicio de sesión, recibirá el resultado en 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. // ... } }
Configurar métodos de inicio de sesión
Autenticación de enlace de correo electrónico
En Firebase console , abra la sección Autenticación . En la pestaña Método de inicio de sesión , habilite el proveedor de correo electrónico/contraseña . Tenga en cuenta que el inicio de sesión con correo electrónico/contraseña debe estar habilitado para usar el inicio de sesión con enlace de correo electrónico.
En la misma sección, habilite el método de inicio de sesión con enlace de correo electrónico (inicio de sesión sin contraseña) y haga clic en Guardar .
También deberá habilitar Firebase Dynamic Links para usar el inicio de sesión con enlace de correo electrónico. En Firebase console , haga clic en Dynamic Links debajo de Engage en la barra de navegación. Haga clic en Primeros pasos y agregue un dominio. El dominio que elija aquí se reflejará en los enlaces de correo electrónico enviados a sus usuarios.
Puede habilitar el inicio de sesión con enlace de correo electrónico en FirebaseUI llamando a
enableEmailLinkSignIn
en una instancia deEmailBuilder
. También deberá proporcionar un objetoActionCodeSettings
válido consetHandleCodeInApp
establecido en verdadero. Además, debe incluir en la lista blanca la URL que pasa asetUrl
, lo que se puede hacer en la consola de Firebase , en Autenticación -> Métodos de inicio de sesión -> Dominios autorizados.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);
Si desea capturar el enlace en una actividad específica, siga los pasos que se describen aquí . De lo contrario, el enlace redirigirá a la actividad de su iniciador.
Una vez que capte el enlace profundo, deberá llamar para verificar que podamos manejarlo por usted. Si podemos, debe pasárnoslo a través de
setEmailLink
.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); } }
Se admite el inicio de sesión con enlace de correo electrónico multidispositivo opcional , lo que significa que el enlace enviado a través de su aplicación de Android se puede usar para iniciar sesión en su web o aplicaciones de Apple. De forma predeterminada, la compatibilidad con varios dispositivos está habilitada. Puede desactivarlo llamando a
setForceSameDevice
en la instancia deEmailBuilder
.Consulte FirebaseUI-Web y FirebaseUI-iOS para obtener más información.
Desconectar
FirebaseUI proporciona métodos prácticos para cerrar sesión en Firebase Authentication, así como en todos los proveedores de identidad social:
Kotlin+KTX
AuthUI.getInstance() .signOut(this) .addOnCompleteListener { // ... }
Java
AuthUI.getInstance() .signOut(this) .addOnCompleteListener(new OnCompleteListener<Void>() { public void onComplete(@NonNull Task<Void> task) { // ... } });
También puede eliminar completamente la cuenta del usuario:
Kotlin+KTX
AuthUI.getInstance() .delete(this) .addOnCompleteListener { // ... }
Java
AuthUI.getInstance() .delete(this) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { // ... } });
personalización
De manera predeterminada, FirebaseUI usa AppCompat para la creación de temas, lo que significa que adoptará naturalmente el esquema de color de su aplicación. Si necesita más personalización, puede pasar un tema y un logotipo al generador de Intent
de inicio de sesión:
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);
También puede establecer una política de privacidad y términos de servicio personalizados:
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);
Próximos pasos
- Para obtener más información sobre el uso y la personalización de FirebaseUI, consulte el archivo LÉAME en GitHub.
- Si encuentra un problema en FirebaseUI y desea informarlo, use el rastreador de problemas de GitHub .