Ir a la consola

Autentica mediante Twitter en Android

Para permitir que los usuarios se autentiquen con Firebase mediante sus cuentas de Twitter, integra la autenticación de Twitter a la app.

Antes de comenzar

  1. Si aún no lo has hecho, agrega Firebase a tu proyecto de Android.
  2. En el archivo build.gradle de nivel de proyecto, asegúrate de incluir el repositorio Maven de Google en las secciones buildscript y allprojects.
  3. Agrega la dependencia para 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:17.0.0'
    
  4. Registra tu app como una aplicación de desarrollador en Twitter y obtén la clave de API y el secreto de API correspondientes.
  5. Habilita el acceso a través de Twitter:
    1. En Firebase console, abre la sección Auth.
    2. En la pestaña Método de acceso, habilita el método de acceso Twitter y especifica la clave de API y el secreto de API que obtuviste de Twitter.
    3. Después, asegúrate de que el URI de redireccionamiento de OAuth de Firebase (p. ej., my-app-12345.firebaseapp.com/__/auth/handler) esté configurado como la URL de devolución de llamada en la página de configuración de tu app que se encuentra en la configuración de la app de Twitter.

Autentica con Firebase

  1. En el método onCreate de tu actividad de acceso, obtén la instancia compartida del objeto FirebaseAuth:

    Java
    Android

    private FirebaseAuth mAuth;// ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();

    Kotlin
    Android

    private lateinit var auth: FirebaseAuth// ...
    // Initialize Firebase Auth
    auth = FirebaseAuth.getInstance()
  2. Cuando inicies la actividad, verifica que el usuario haya accedido:

    Java
    Android

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }

    Kotlin
    Android

    public override fun onStart() {
        super.onStart()
        // Check if user is signed in (non-null) and update UI accordingly.
        val currentUser = auth.currentUser
        updateUI(currentUser)
    }
  3. Para integrar el Acceso con Twitter a tu app, sigue la documentación del programador. Al final del flujo de acceso de Twitter, recibirás un token de acceso y un secreto de OAuth. El código de tu actividad debe ser similar al siguiente:

    Java
    Android

    private TwitterLoginButton mLoginButton;
    
    // ...
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // ...
        mLoginButton = findViewById(R.id.buttonTwitterLogin);
        mLoginButton.setCallback(new Callback<TwitterSession>() {
            @Override
            public void success(Result<TwitterSession> result) {
                Log.d(TAG, "twitterLogin:success" + result);
                handleTwitterSession(result.data);
            }
    
            @Override
            public void failure(TwitterException exception) {
                Log.w(TAG, "twitterLogin:failure", exception);
                updateUI(null);
            }
        });}
    
    // ...
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        // Pass the activity result to the Twitter login button.
        mLoginButton.onActivityResult(requestCode, resultCode, data);
    }
    

    Kotlin
    Android

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    
        buttonTwitterLogin?.callback = object : Callback<TwitterSession>() {
            override fun success(result: Result<TwitterSession>) {
                Log.d(TAG, "twitterLogin:success$result")
                handleTwitterSession(result.data)
            }
    
            override fun failure(exception: TwitterException) {
                Log.w(TAG, "twitterLogin:failure", exception)
                updateUI(null)
            }
        }}
    
    // ...
    
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
    
        // Pass the activity result to the Twitter login button.
        loginButton!!.onActivityResult(requestCode, resultCode, data)
    }
          
  4. Después de que un usuario acceda correctamente con Twitter, intercambia el token de acceso de OAuth y el secreto de OAuth por una credencial de Firebase y úsala para realizar la autenticación con Firebase:

    Java
    Android

    private void handleTwitterSession(TwitterSession session) {
        Log.d(TAG, "handleTwitterSession:" + session);
    
        AuthCredential credential = TwitterAuthProvider.getCredential(
                session.getAuthToken().token,
                session.getAuthToken().secret);
    
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // Sign in success, update UI with the signed-in user's information
                            Log.d(TAG, "signInWithCredential:success");
                            FirebaseUser user = mAuth.getCurrentUser();
                            updateUI(user);
                        } else {
                            // If sign in fails, display a message to the user.
                            Log.w(TAG, "signInWithCredential:failure", task.getException());
                            Toast.makeText(TwitterLoginActivity.this, "Authentication failed.",
                                    Toast.LENGTH_SHORT).show();
                            updateUI(null);
                        }
    
                        // ...
                    }
                });
    }

    Kotlin
    Android

    private fun handleTwitterSession(session: TwitterSession) {
        Log.d(TAG, "handleTwitterSession:$session")
    
        val credential = TwitterAuthProvider.getCredential(
                session.authToken.token,
                session.authToken.secret)
    
        auth.signInWithCredential(credential)
                .addOnCompleteListener(this) { task ->
                    if (task.isSuccessful) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithCredential:success")
                        val user = auth.currentUser
                        updateUI(user)
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithCredential:failure", task.exception)
                        Toast.makeText(baseContext, "Authentication failed.",
                                Toast.LENGTH_SHORT).show()
                        updateUI(null)
                    }
    
                    // ...
                }
    }
    Si la llamada a signInWithCredential funciona correctamente, puedes usar el FirebaseUser resultante para continuar.

Pasos siguientes

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 usó para acceder. Esta cuenta 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 del perfil del usuario a partir del objeto FirebaseUser. Consulta Administra usuarios.

  • En las 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 con varios proveedores de autenticación, puedes vincular las credenciales de proveedores de autenticación a una cuenta de usuario existente.

Para cerrar la sesión de un usuario, llama a signOut de la siguiente manera:

Java
Android

FirebaseAuth.getInstance().signOut();

Kotlin
Android

FirebaseAuth.getInstance().signOut()