Cómo autenticar 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. Agrega Firebase a tu proyecto de Android.
  2. Si aún no conectaste la app al proyecto de Firebase, puedes hacerlo desde Firebase console.
  3. Agrega la dependencia para Firebase Authentication al archivo build.gradle de nivel de app:
    compile 'com.google.firebase:firebase-auth:11.2.0'
  4. Registra tu app como una aplicación de programador en Twitter y obtén la clave de API y el secreto de API de tu app.
  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 URL de devolución de llamada en la página de configuración de tu app 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:
    private FirebaseAuth mAuth;
    
    // ...
    
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();
    
  2. Cuando inicies la actividad, verifica que el usuario haya accedido:
    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        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 de OAuth y un secreto de OAuth. El código de tu actividad debe ser similar al siguiente:
    private TwitterLoginButton mLoginButton;
    
    // ...
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // ...
        mLoginButton = (TwitterLoginButton) findViewById(R.id.button_twitter_login);
        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);
    }
    
  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 en Firebase:
    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);
                        }
    
                        // ...
                    }
                });
    }
    
    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) con las que el usuario accedió. 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 de tu 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 Cómo administrar usuarios.

  • En las reglas de seguridad de Firebase Realtime Database y Cloud Storage, puedes obtener el ID único del usuario que accedió a partir de la variable auth y usarlo para controlar los datos a los que el usuario tiene acceso.

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

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

FirebaseAuth.getInstance().signOut();

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.