Google Firebase cerrar sesión y olvidarse del usuario en la aplicación de Android

Cuando llamo a mFirebaseAuth.signOut() o mFirebaseUser.delete() mi FirebaseAuth.AuthStateListener() funciona correctamente y devuelve null como instancia de FirebaseUser en onAuthStateChanged , actualizo UI y muestro el botón “Iniciar sesión con Google”.

Pero cuando quiero volver a iniciar sesión, no veo la ventana emergente con los usuarios (tengo 2 usuarios en mi dispositivo, adjunto la imagen). La aplicación muestra esta ventana emergente solo en el primer inicio de sesión, luego usa el mismo usuario. Si borro los datos de la aplicación en la pantalla de configuración, podré ver esta ventana emergente de nuevo.

Mi pregunta es cómo mostrar esta ventana emergente después de cada cierre de sesión.

enter image description here

Ejecuto este código cuando presiono el botón Iniciar sesión:

 GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build(); mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build(); Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); startActivityForResult(signInIntent, FirebaseActivity.REQUEST_SIGN_IN); 

En onActivityResult() , obtengo una instancia de GoogleSignInResult así que todo lo que necesito sucede después de que llamo a startActivityForResult() .

En el código de muestra de Firebase Auth Quickstart , el cierre de sesión para el proveedor de Google incluye estos pasos. ¿ Auth.GoogleSignInApi.signOut() a Auth.GoogleSignInApi.signOut() cuando Auth.GoogleSignInApi.signOut() sesión?

 private void signOut() { // Firebase sign out mAuth.signOut(); // Google sign out Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback( new ResultCallback() { @Override public void onResult(@NonNull Status status) { updateUI(null); } }); } 

Para cualquier otra persona que quiera este resultado (como recuperar las opciones de la cuenta de Google) en una actividad diferente.

 public static void signOut() { // Firebase sign out mAuth.signOut(); // Google sign out Auth.GoogleSignInApi.signOut(mGoogleApiClient); } 

Agregue esto en la página de inicio de sesión, y antes de pasar a la siguiente actividad, simplemente llame a SignOut() .

 // everything ok... signOut(); startActivity(new Intent(SignIn.this,NextOne.class)); 

y luego, en tu otra clase puedes llamar

 FirebaseAuth.getInstance().signOut(); startActivity(new Intent(NextClass.this, SignIn.class)); 

Es fácil, y funcionará. ¡Aclamaciones!

Otra opción es usar la biblioteca FirebaseUI . Simplifica las operaciones de inicio y cierre de sesión en un sentido que hará todo el trabajo pesado por usted.

Kotlin

 AuthUI.getInstance().signOut(this).addOnCompleteListener { // do something here } 

Java

 AuthUI.getInstance() .signOut(ActivityMainOld.this) .addOnCompleteListener(new OnCompleteListener(){ @Override public void onComplete(@NonNull Task task) { // do something here } }); 

Espero que esto ayude

También puedes definir algo como esto:

 private void signOut() { mAuth.signOut(); mGoogleSignInClient.signOut().addOnCompleteListener(this, new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { Intent intent = new Intent(YourActivity.this, NextActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); } }); } 
 private void sendToLogin() { //funtion GoogleSignInClient mGoogleSignInClient ; GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build(); mGoogleSignInClient = GoogleSignIn.getClient(getBaseContext(), gso); mGoogleSignInClient.signOut().addOnCompleteListener(/*CURRENT CLASS */.this, new OnCompleteListener() { //signout Google @Override public void onComplete(@NonNull Task task) { FirebaseAuth.getInstance().signOut(); //signout firebase Intent setupIntent = new Intent(getBaseContext(), /*To ur activity calss*/); Toast.makeText(getBaseContext(), "Logged Out", Toast.LENGTH_LONG).show(); //if u want to show some text setupIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(setupIntent); finish(); } }); } 

este código está escrito para que funcione como copiar pasado solo leyó COMENTARIOS en el código para personalizarlo según sus necesidades, prefiero enviar al usuario para iniciar sesión

Hice mGoogleSignInClient.signOut() esto está funcionando como se esperaba.