Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Autenticarse usando Twitter en Android

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

Puede permitir que sus usuarios se autentiquen con Firebase usando sus cuentas de Twitter al integrar el inicio de sesión OAuth genérico basado en la web en su aplicación usando el SDK de Firebase para llevar a cabo el flujo de inicio de sesión de extremo a extremo.

Antes de que empieces

Para que los usuarios inicien sesión con cuentas de Twitter, primero debe habilitar Twitter como proveedor de inicio de sesión para su proyecto de Firebase:

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

  2. En Firebase console , abra la sección Auth .
  3. En la pestaña Método de inicio de sesión , habilite el proveedor de Twitter .
  4. Agregue la clave de API y el secreto de API de la consola de desarrollador de ese proveedor a la configuración del proveedor:
    1. Registre su aplicación como aplicación de desarrollador en Twitter y obtenga la clave de API de OAuth y el secreto de API de su aplicación.
    2. Asegúrese de que su URI de redirección de OAuth de Firebase (p. ej. my-app-12345.firebaseapp.com/__/auth/handler ) esté configurada como su URL de devolución de llamada de autorización en la página de configuración de su aplicación en la configuración de su aplicación de Twitter .
  5. Haga clic en Guardar .
  6. En el archivo Gradle de tu módulo (nivel de aplicación) (generalmente <project>/<app-module>/build.gradle ), agrega la dependencia para la biblioteca de Android Firebase Authentication. Recomendamos usar Firebase Android BoM para controlar el control de versiones de la biblioteca.

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.1.0')
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth'
    }
    

    Al usar Firebase Android BoM , su aplicación siempre usará versiones compatibles de las bibliotecas de Firebase Android.

    (Alternativa) Agregar dependencias de la biblioteca de Firebase sin usar el BoM

    Si elige no usar Firebase BoM, debe especificar cada versión de la biblioteca de Firebase en su línea de dependencia.

    Tenga en cuenta que si usa varias bibliotecas de Firebase en su aplicación, le recomendamos enfáticamente que use la lista de materiales para administrar las versiones de la biblioteca, lo que garantiza que todas las versiones sean compatibles.

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth:21.1.0'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:31.1.0')
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx'
    }
    

    Al usar Firebase Android BoM , su aplicación siempre usará versiones compatibles de las bibliotecas de Firebase Android.

    (Alternativa) Agregar dependencias de la biblioteca de Firebase sin usar el BoM

    Si elige no usar Firebase BoM, debe especificar cada versión de la biblioteca de Firebase en su línea de dependencia.

    Tenga en cuenta que si usa varias bibliotecas de Firebase en su aplicación, le recomendamos enfáticamente que use la lista de materiales para administrar las versiones de la biblioteca, lo que garantiza que todas las versiones sean compatibles.

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx:21.1.0'
    }
    

  7. Si aún no ha especificado la huella digital SHA-1 de su aplicación, hágalo desde la página Configuración de Firebase console. Consulte Autenticación de su cliente para obtener detalles sobre cómo obtener la huella digital SHA-1 de su aplicación.

Manejar el flujo de inicio de sesión con el SDK de Firebase

Si está creando una aplicación para Android, la forma más fácil de autenticar a sus usuarios con Firebase usando sus cuentas de Twitter es manejar todo el flujo de inicio de sesión con Firebase Android SDK.

Para manejar el flujo de inicio de sesión con Firebase Android SDK, sigue estos pasos:

  1. Construya una instancia de un OAuthProvider utilizando su Builder con el ID de proveedor Twitter.com

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

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

    Para conocer los parámetros compatibles con Twitter, consulte la documentación de Twitter OAuth . Tenga en cuenta que no puede pasar parámetros requeridos por Firebase con setCustomParameters() . Estos parámetros son client_id , response_type , redirect_uri , state , scope y response_mode .

  3. Autenticarse con Firebase mediante el objeto del proveedor de OAuth. Tenga en cuenta que, a diferencia de otras operaciones de FirebaseAuth, esto tomará el control de su interfaz de usuario al mostrar una pestaña personalizada de Chrome . Como resultado, no haga referencia a su actividad en OnSuccessListener y OnFailureListener que adjunte, ya que se separarán inmediatamente cuando la operación inicie la interfaz de usuario.

    Primero debe comprobar si ya ha recibido una respuesta. Iniciar sesión a través de este método pone su actividad en segundo plano, lo que significa que el sistema puede recuperarla durante el flujo de inicio de sesión. Para asegurarse de que no haga que el usuario intente nuevamente si esto sucede, debe verificar si ya hay un resultado presente.

    Para verificar si hay un resultado pendiente, llame 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:
                  // ((OAuthCredential)authResult.getCredential()).getAccessToken().
                  // The OAuth secret can be retrieved by calling:
                  // ((OAuthCredential)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 inicio de sesión, llame 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:
                // ((OAuthCredential)authResult.getCredential()).getAccessToken().
                // The OAuth secret can be retrieved by calling:
                // ((OAuthCredential)authResult.getCredential()).getSecret().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

    Al completarse con éxito, el token de acceso de OAuth asociado con el proveedor se puede recuperar del objeto OAuthCredential devuelto.

    Con el token de acceso de OAuth, puede llamar a la API de Twitter .

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

  4. Si bien los ejemplos anteriores se enfocan en los flujos de inicio de sesión, también tiene la capacidad de vincular un proveedor de Twitter a un usuario existente mediante startActivityForLinkWithProvider . Por ejemplo, puede vincular varios proveedores al mismo usuario, permitiéndoles iniciar sesión 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. El mismo patrón se puede usar con startActivityForReauthenticateWithProvider , que se puede usar para recuperar credenciales nuevas para operaciones confidenciales que requieren un inicio de sesión 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

Después de que un usuario inicia sesión por primera vez, se crea una nueva cuenta de usuario y se vincula a las credenciales (es decir, el nombre de usuario y la contraseña, el número de teléfono o la información del proveedor de autenticación) con las que el usuario inició sesión. Esta nueva cuenta se almacena como parte de su proyecto de Firebase y se puede usar para identificar a un usuario en cada aplicación de su proyecto, independientemente de cómo inicie sesión el usuario.

  • En sus aplicaciones, puede obtener la información básica del perfil del usuario del objeto FirebaseUser . Consulte Administrar usuarios .

  • En sus Reglas de seguridad de Firebase Realtime Database y Cloud Storage, puede obtener el ID de usuario único del usuario que inició sesión de la variable auth y usarlo para controlar a qué datos puede acceder un usuario.

Puede permitir que los usuarios inicien sesión en su aplicación utilizando varios proveedores de autenticación vinculando las credenciales del proveedor de autenticación a una cuenta de usuario existente.

Para cerrar la sesión de un usuario, llame a signOut :

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()