Implementarás un login con Google en Firebase en tu aplicación Android. Además obtendrás la información del usuario directamente desde Firebase, nombre, correo y fotografía.
Aprenderás
- Implementar un Login Google en Firebase
- Obtener información del usuario directamente desde Firebase
Requisitos
- Haber implementado Login con Google en Android
Configuración
build.gradle
del módulo
compile 'com.google.firebase:firebase-auth:9.8.0'
Las versiones pueden cambiar rápidamente, se debe considerar usar la misma versión que
play-services-auth
Implementación
FirebaseAuth
& ListenerFirebaseAuth.AuthStateListener
es el oyente que se encarga de avisarnos cuando estamos autenticados o no.
Atributos en la Activity que se necesite manejar la autenticación.
private FirebaseAuth firebaseAuth;
private FirebaseAuth.AuthStateListener firebaseAuthListener;
Inicialización en el método onCreate()
firebaseAuth = FirebaseAuth.getInstance();
firebaseAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
goMainScreen();
}
}
};
Empezar a escuchar en el método onStart()
de la Activity
firebaseAuth.addAuthStateListener(firebaseAuthListener);
Terminar de escuchar en el método onStop()
de la Activity
if (firebaseAuthListener != null) {
firebaseAuth.removeAuthStateListener(firebaseAuthListener);
}
Modificaciones
Adición del método requestIdToken()
al GoogleSignInOptions
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
Método de autenticación con Firebase
private void firebaseAuthWithGoogle(GoogleSignInAccount signInAccount) {
//...
AuthCredential credential = GoogleAuthProvider.getCredential(signInAccount.getIdToken(), null);
firebaseAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
//...
if (!task.isSuccessful()) {
Toast.makeText(getApplicationContext(), "Authentication failed.", Toast.LENGTH_SHORT).show();
}
}
});
}
Llamado luego de que la autenticación con Google fue exitosa.
firebaseAuthWithGoogle(result.getSignInAccount());
Información del usuario
Se puede acceder al usuario actual desde cualquier parte de nuestra aplicación mediante el método getCurrentUser()
del FirebaseAuth
.
Si el método getCurrentUser()
es null
nadie se autenticó en la aplicación.
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
nameTextView.setText(user.getDisplayName());
emailTextView.setText(user.getEmail());
idTextView.setText(user.getUid());
Glide.with(getApplicationContext()).load(user.getPhotoUrl()).into(photoImageView);
} else {
goLogInScreen();
}
Cerrar sesión y revocar acceso
Basta con usar el método signOut()
del FirebaseAuth
en cualquier parte de nuestra aplicación seguida del cierre de sesión o revoco de acceso de Google.
public void logOut(View view) {
firebaseAuth.signOut();
// Sign Out Google...
}
public void revoke(View view) {
firebaseAuth.signOut();
// Revoke Access Google...
}
El Código
Si encuentras un error, por favor crea un Issue. Lo solucionaremos ASAP.
Crear un Issue