Ir a la consola

Autentica mediante Twitter en Android

Puedes permitir que los usuarios autentiquen con Firebase mediante sus cuentas de Twitter. Para ello, debes integrar un acceso genérico basado en web de OAuth en tu app y usar el SDK de Firebase para llevar a cabo el flujo de acceso de extremo a extremo.

Antes de comenzar

Para que los usuarios accedan con cuentas de Twitter, primero debes habilitar Twitter como un proveedor de acceso para tu proyecto de Firebase:

  1. Si aún no lo has hecho, agrega Firebase a tu proyecto de Android.

  2. En Firebase console, abre la sección Auth.
  3. En la pestaña Método de acceso, habilita el proveedor Twitter.
  4. Agrega la clave y el secreto de API de la consola para desarrolladores de ese proveedor a la configuración del proveedor:
    1. Registra tu app como una aplicación de desarrollador en Twitter y obtén la clave de API y el secreto de API de OAuth correspondientes.
    2. Asegúrate de que tu URI de redireccionamiento de OAuth de Firebase (p. ej., my-app-12345.firebaseapp.com/__/auth/handler) esté configurado como URL de devolución de llamada de autorización en la página de configuración de tu app en Twitter.
  5. Haz clic en Guardar.
  6. En tu archivo build.gradle de nivel de proyecto, asegúrate de incluir el repositorio Maven de Google en las secciones buildscript y allprojects.

  7. Agrega la dependencia de la biblioteca de Android de Firebase Authentication al archivo Gradle (generalmente app/build.gradle) de tu módulo (a nivel de la app):

    implementation 'com.google.firebase:firebase-auth:19.1.0'
    
  8. Si aún no has especificado la huella digital SHA-1 de tu app, hazlo desde la página de configuración de Firebase console. Consulta Autentica tu cliente para obtener detalles sobre cómo obtener la huella digital SHA-1 de tu app.

Maneja el flujo de acceso con el SDK de Firebase

Si estás compilando una app para Android, la manera más sencilla de autenticar a tus usuarios con Firebase mediante sus cuentas de Twitter es manejar el flujo de acceso con el SDK de Firebase Android.

A fin de manejar el flujo de acceso con el SDK de Firebase Android, sigue estos pasos:

  1. Crea una instancia de un OAuthProvider usando su compilador con el ID de proveedor Twitter.com.

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("twitter.com");
    
  2. Opcional: Especifica otros parámetros de OAuth personalizados que quieras enviar con la solicitud de OAuth.

    // Target specific email with login hint.
    provider.addCustomParameter("lang", "fr");
    

    Para conocer los parámetros que admite Twitter, consulta la documentación de OAuth de Twitter. Ten en cuenta que no puedes pasar los parámetros obligatorios de Firebase con setCustomParameters(). Estos parámetros son client_id, response_type, redirect_uri, state, scope y response_mode.

  3. Autentica con Firebase mediante el objeto del proveedor de OAuth. Ten en cuenta que, a diferencia de otras operaciones de Firebase Auth, esta tomará el control de tu IU mediante una pestaña personalizada emergente de Chrome. Por lo tanto, no hagas referencia a tu actividad en el OnSuccessListener ni en el OnFailureListener que adjuntas, ya que se desvincularán inmediatamente cuando la operación inicie la IU.

    Lo primero que debes hacer es revisar si ya recibiste una respuesta. Acceder a través de este método coloca tu actividad en segundo plano, lo que significa que el sistema puede volver a reclamarla durante el flujo de acceso. Para asegurarte de no hacer que el usuario realice otro intento en caso de que esto ocurra, debes revisar si ya hay un resultado.

    Para verificar si hay un resultado pendiente, llama a getPendingAuthResult:

    Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult();
    if (pendingResultTask != null) {
      // There's something already here! Finish the sign-in for your user.
      pendingResultTask
          .addOnSuccessListener(
              new OnSuccessListener<AuthResult>() {
                @Override
                public void onSuccess(AuthResult authResult) {
                  // User is signed in.
                  // IdP data available in
                  // authResult.getAdditionalUserInfo().getProfile().
                  // The OAuth access token can also be retrieved:
                  // authResult.getCredential().getAccessToken().
                  // The OAuth secret can be retrieved by calling:
                  // authResult.getCredential().getSecret().
                }
              })
          .addOnFailureListener(
              new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                  // Handle failure.
                }
              });
    } else {
      // There's no pending result so you need to start the sign-in flow.
      // See below.
    }
    

    Para iniciar el flujo de acceso, llama a startActivityForSignInWithProvider:

    firebaseAuth
        .startActivityForSignInWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is signed in.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can also be retrieved:
                // authResult.getCredential().getAccessToken().
                // The OAuth secret can be retrieved by calling:
                // authResult.getCredential().getSecret().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

    Si se completa correctamente, el token de acceso de OAuth asociado con el proveedor se puede recuperar a partir del objeto OAuthCredential que se muestra.

    Mediante el token de acceso de OAuth, puedes llamar a la API de Twitter.

    Por ejemplo, para obtener la información básica de perfil, puedes llamar a la API de REST y pasar el token de acceso en el encabezado Authorization:

  4. Si bien los ejemplos anteriores se enfocan en los flujos de acceso, también puedes vincular un proveedor de Twitter con un usuario existente mediante startActivityForLinkWithProvider. Por ejemplo, puedes vincular varios proveedores con el mismo usuario para que este pueda acceder con cualquiera de ellos.

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForLinkWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // Twitter credential is linked to the current user.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can also be retrieved:
                // authResult.getCredential().getAccessToken().
                // The OAuth secret can be retrieved by calling:
                // authResult.getCredential().getSecret().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    
    
  5. Se puede utilizar el mismo patrón con startActivityForReauthenticateWithProvider, que se puede usar a fin de recuperar credenciales nuevas para operaciones sensibles que requieren un acceso reciente.

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is re-authenticated with fresh tokens and
                // should be able to perform sensitive operations
                // like account deletion and email or password
                // update.
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

Próximos pasos

Cuando un usuario accede por primera vez, se crea una cuenta de usuario nueva y se la vincula con las credenciales (el nombre de usuario y la contraseña, el número de teléfono o la información del proveedor de autenticación) que el usuario utilizó para acceder. Esta cuenta nueva se almacena como parte de tu proyecto de Firebase y se puede usar para identificar a un usuario en todas las apps del proyecto, sin importar cómo acceda.

  • En tus apps, puedes obtener la información básica de perfil del usuario a partir del objeto FirebaseUser. Consulta Administra usuarios.

  • En tus reglas de seguridad de Firebase Realtime Database y Cloud Storage, puedes obtener el ID del usuario único que accedió a partir de la variable auth y usarlo para controlar a qué datos podrá acceder.

Para permitir que los usuarios accedan a tu app mediante varios proveedores de autenticación, puedes vincular las credenciales de estos proveedores con una cuenta de usuario existente.

Para salir de la sesión de un usuario, llama a signOut:

Java

FirebaseAuth.getInstance().signOut();

Kotlin

FirebaseAuth.getInstance().signOut()