Ir a la consola

Autentica mediante GitHub en Android

Puedes integrar la autenticación de GitHub en tu app para permitir que los usuarios se autentiquen en Firebase con sus cuentas de GitHub.

Antes de comenzar

  1. Agrega Firebase al proyecto 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 a tu archivo build.gradle de nivel de tu app:
    implementation 'com.google.firebase:firebase-auth:16.0.4'
  4. Registra la app como una aplicación de desarrollador de GitHub y obtén el ID de cliente y el Secreto de cliente de OAuth 2.0.
  5. Habilita la autenticación de GitHub:
    1. En Firebase console, abre la sección Auth.
    2. En la pestaña Método de acceso, habilita el método de acceso GitHub y especifica el ID de cliente y el secreto de cliente de OAuth 2.0 que obtuviste de GitHub.
    3. Luego, 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 la app, en la configuración de tu app de GitHub.

Autentica con Firebase

  1. Para integrar la autenticación de GitHub en la app, sigue las indicaciones que se brindan en la documentación para desarrolladores. Usa el flujo de aplicación web y configura un filtro intent en la app para manejar la devolución de llamada de OAuth 2.0 desde GitHub. Al final del flujo de acceso de GitHub, recibirás el token de acceso OAuth 2.0.
  2. 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()
  3. 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)
    }
  4. Una vez que un usuario acceda correctamente con GitHub, intercambia el token de acceso OAuth 2.0 por una credencial de Firebase y úsala para realizar la autenticación con Firebase:

    Java
    Android

    String token = "<GITHUB-ACCESS-TOKEN>";
    AuthCredential credential = GithubAuthProvider.getCredential(token);
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful());
    
                    // If sign in fails, display a message to the user. If sign in succeeds
                    // the auth state listener will be notified and logic to handle the
                    // signed in user can be handled in the listener.
                    if (!task.isSuccessful()) {
                        Log.w(TAG, "signInWithCredential", task.getException());
                        Toast.makeText(MainActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                    }
    
                    // ...
                }
            });

    Kotlin
    Android

    val token = "<GITHUB-ACCESS-TOKEN>"
    val credential = GithubAuthProvider.getCredential(token)
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this) { task ->
                Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful)
    
                // If sign in fails, display a message to the user. If sign in succeeds
                // the auth state listener will be notified and logic to handle the
                // signed in user can be handled in the listener.
                if (!task.isSuccessful) {
                    Log.w(TAG, "signInWithCredential", task.exception)
                    Toast.makeText(baseContext, "Authentication failed.",
                            Toast.LENGTH_SHORT).show()
                }
    
                // ...
            }
    Si la llamada a signInWithCredential se ejecuta correctamente, puedes usar el método getCurrentUser para obtener los datos de la cuenta del usuario.

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 accedió el usuario. 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 las 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 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:

Java
Android

FirebaseAuth.getInstance().signOut();

Kotlin
Android

FirebaseAuth.getInstance().signOut()