FirebaseUI es una biblioteca creada sobre el SDK de autenticación de Firebase que proporciona flujos de interfaz de usuario 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 tareas de gestión de cuentas, como la creación de cuentas y el restablecimiento de contraseñas.
- Vinculación de cuentas : fluye para vincular de forma segura cuentas de usuarios entre proveedores de identidad.
- Actualización de usuarios anónimos : flujos para actualizar de forma segura a usuarios anónimos.
- Temas personalizados : personaliza el aspecto de FirebaseUI para que coincida con tu aplicación. Además, como FirebaseUI es de código abierto, puedes bifurcar el proyecto y personalizarlo exactamente según tus necesidades.
- Smart Lock para contraseñas : integración automática con Smart Lock para contraseñas para un inicio de sesión rápido entre dispositivos.
Antes de que empieces
Si aún no lo has hecho, agrega Firebase a tu proyecto de Android .
Agregue las dependencias de 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 en el SDK de servicios de Google Play.
En Firebase console , abre la sección Autenticación y habilita los métodos de inicio de sesión que deseas admitir. Algunos métodos de inicio de sesión requieren información adicional, generalmente disponible en la consola de desarrollador del servicio.
Si habilitó el inicio de sesión de Google:
Cuando se le solicite en la consola, descargue el archivo de configuración de Firebase actualizado (
google-services.json
), que ahora contiene la información del cliente OAuth necesaria para iniciar sesión en Google.Mueva este archivo de configuración actualizado a su proyecto de Android Studio, reemplazando el archivo de configuración correspondiente ahora obsoleto. (Consulta Agregar Firebase a tu proyecto de Android ).
Si aún no ha especificado la huella digital SHA de su aplicación, hágalo desde la página Configuración de Firebase console. Consulte Autenticar a su cliente para obtener detalles sobre cómo obtener la huella digital SHA 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>
Iniciar sesión
Cree un ActivityResultLauncher
que registre una devolución de llamada para el contrato de resultado de la 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 , abre 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 por correo electrónico/contraseña debe estar habilitado para utilizar el inicio de sesión mediante enlace de correo electrónico.
En la misma sección, habilite el método de inicio de sesión mediante 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 utilizar el inicio de sesión mediante enlace de correo electrónico. En Firebase console , haga clic en Dynamic Links en Engage en la barra de navegación. Haga clic en Comenzando 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 instanciaEmailBuilder
. 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 Firebase console , 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 ver el enlace en una actividad específica, siga los pasos que se describen aquí . De lo contrario, el enlace redirigirá a su actividad de inicio.
Una vez que capte el enlace profundo, deberá llamar para verificar que podamos manejarlo por usted. Si podemos, deberá enviá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 opcional con enlace de correo electrónico entre dispositivos, lo que significa que el enlace enviado a través de su aplicación de Android se puede utilizar para iniciar sesión en su web o aplicaciones de Apple. De forma predeterminada, la compatibilidad con varios dispositivos está habilitada. Puede desactivarlo llamando
setForceSameDevice
en la instanciaEmailBuilder
.Consulte FirebaseUI-Web y FirebaseUI-iOS para obtener más información.
Desconectar
FirebaseUI proporciona métodos convenientes 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 puedes 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 forma predeterminada, FirebaseUI usa AppCompat para la temática, lo que significa que adoptará naturalmente la combinación de colores de su aplicación. Si necesita una mayor personalización, puede pasar un tema y un logotipo al generador Intent
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 README en GitHub.
- Si encuentra un problema en FirebaseUI y desea informarlo, utilice el rastreador de problemas de GitHub .