web-dev-qa-db-fra.com

Google Firebase se déconnecte et oublie l'utilisateur dans l'application Android

Lorsque j'appelle mFirebaseAuth.signOut() ou mFirebaseUser.delete(), mon FirebaseAuth.AuthStateListener() fonctionne correctement et renvoie null en tant qu'instance FirebaseUser dans onAuthStateChanged, j'actualise l'interface utilisateur et affiche le bouton "Connexion avec Google".

Mais lorsque je veux me reconnecter, je ne vois pas la fenêtre contextuelle avec les utilisateurs (j'ai 2 utilisateurs sur mon appareil, qui est attachée à l'image). L'application affiche cette fenêtre contextuelle uniquement lors de la première connexion, après quoi elle utilise le même utilisateur. Si j'efface les données de l'application sur l'écran des paramètres, je pourrai voir à nouveau cette fenêtre contextuelle.

Ma question est de savoir comment afficher cette fenêtre contextuelle après chaque déconnexion.

 enter image description here

Je lance ce code lorsque vous appuyez sur le bouton Sign In:

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);

Dans onActivityResult(), je reçois une instance de GoogleSignInResult afin que tout ce dont j'ai besoin se produise après l'appel de startActivityForResult().

17
GrafOrlov

Dans l'exemple de code Firebase Auth Quickstart , la déconnexion du fournisseur Google inclut ces étapes. Appelez-vous GoogleSignInClient.signOut() lorsque vous vous déconnectez?

private void signOut() {
    // Firebase sign out
    mAuth.signOut();

    // Google sign out
    mGoogleSignInClient.signOut().addOnCompleteListener(this,
            new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    updateUI(null);
                }
            });
}
33
Bob Snyder

Une autre option consiste à utiliser la bibliothèque FirebaseUI . Il simplifie les opérations sign in et signout dans le sens où il fera le gros du travail pour vous.

Kotlin

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

Java

AuthUI.getInstance()
      .signOut(ActivityMainOld.this)
      .addOnCompleteListener(new OnCompleteListener<Void>(){

          @Override
          public void onComplete(@NonNull Task<Void> task) {

              // do something here

          }
      });

J'espère que cela t'aides

6
ZooS

Pour tous ceux qui souhaitent obtenir ce résultat (comme pour récupérer les options du compte Google) sur une activité différente.

public static void signOut() {
    // Firebase sign out
    mAuth.signOut();

    // Google sign out
    Auth.GoogleSignInApi.signOut(mGoogleApiClient);
}

Ajoutez ceci sur la page de connexion et, avant de passer à l'activité suivante, appelez simplement SignOut().

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

et ensuite, dans votre autre classe, vous pouvez appeler

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

C'est facile et ça va marcher. À votre santé!

3
Alex Barbu

Vous pouvez également définir quelque chose comme ceci: 

private void signOut() {
    mAuth.signOut();
    mGoogleSignInClient.signOut().addOnCompleteListener(this,
            new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    Intent intent = new Intent(YourActivity.this, NextActivity.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(intent);
                }
            });
}
2
Vidur Chanana
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<Void>() {  //signout Google
            @Override
            public void onComplete(@NonNull Task<Void> 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();
            }
        });
}

ce code est écrit pour fonctionner en tant que copier passé il suffit de lireCOMMENTAIRESdans le code pour le personnaliser à vos besoins, je préfère envoyer l’utilisateur à la connexion

0
Sumer Singh

J'ai fait mGoogleSignInClient.signOut() Cela fonctionne comme prévu.

0