Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Agregue fácilmente el inicio de sesión a su aplicación de Android con FirebaseUI

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

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

  1. Si aún no lo ha hecho, agregue Firebase a su proyecto de Android .

  2. 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.

  3. 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.

  4. 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.

  5. 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 actividad de FirebaseUI:

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);
            }
        }
);

Kotlin+KTX

// See: https://developer.android.com/training/basics/intents/result
private val signInLauncher = registerForActivityResult(
        FirebaseAuthUIActivityResultContract()
) { res ->
    this.onSignInResult(res)
}

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:

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);

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)

Cuando se complete el flujo de inicio de sesión, recibirá el resultado en onSignInResult :

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.
        // ...
    }
}

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.
        // ...
    }
}

Configurar métodos de inicio de sesión

  1. 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.

  2. 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 .

  3. 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.

  4. Puede habilitar el inicio de sesión con enlace de correo electrónico en FirebaseUI llamando a enableEmailLinkSignIn en una instancia de EmailBuilder . También deberá proporcionar un objeto ActionCodeSettings válido con setHandleCodeInApp establecido en verdadero. Además, debe incluir en la lista blanca la URL que pasa a setUrl , lo que se puede hacer en la consola de Firebase , en Autenticación -> Métodos de inicio de sesión -> Dominios autorizados.

    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);

    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)
  5. 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 lanzador.

  6. 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 .

    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);
        }
    }

    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)
        }
    }
  7. 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 de EmailBuilder .

    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:

Java

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Kotlin+KTX

AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener {
            // ...
        }

También puede eliminar completamente la cuenta del usuario:

Java

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // ...
            }
        });

Kotlin+KTX

AuthUI.getInstance()
        .delete(this)
        .addOnCompleteListener {
            // ...
        }

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:

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);

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)

También puede establecer una política de privacidad y términos de servicio personalizados:

Java

Intent signInIntent = AuthUI.getInstance()
        .createSignInIntentBuilder()
        .setAvailableProviders(providers)
        .setTosAndPrivacyPolicyUrls(
                "https://example.com/terms.html",
                "https://example.com/privacy.html")
        .build();
signInLauncher.launch(signInIntent);

Kotlin+KTX

val 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 .