web-dev-qa-db-ger.com

Google Firebase abmelden und Benutzer in der Android-App vergessen

Wenn ich mFirebaseAuth.signOut() oder mFirebaseUser.delete() anrufe, funktioniert meine FirebaseAuth.AuthStateListener() korrekt und gibt null als FirebaseUser-Instanz in onAuthStateChanged zurück. Ich aktualisiere die Benutzeroberfläche und zeige die Schaltfläche "Mit Google anmelden".

Wenn ich mich jedoch erneut anmelden möchte, sehe ich kein Popup-Fenster mit Benutzern (ich habe zwei Benutzer auf meinem Gerät, an die das Image angehängt ist). Die App zeigt dieses Popup nur bei der ersten Anmeldung an, danach verwendet es denselben Benutzer. Wenn ich die Daten der App auf dem Einstellungsbildschirm lösche, kann ich dieses Popup-Fenster wieder sehen.

Meine Frage ist, wie man dieses Popup nach jedem Abmelden zeigt.

 enter image description here

Ich führe diesen Code aus, wenn Sie auf die Schaltfläche Anmelden klicken:

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

In onActivityResult() bekomme ich eine Instanz von GoogleSignInResult, sodass alles, was ich brauche, geschieht, nachdem ich startActivityForResult() aufgerufen habe.

17
GrafOrlov

Im Firebase Auth Quickstart-Beispielcode umfasst das Abmelden für den Google-Anbieter diese Schritte. Rufen Sie beim Abmelden GoogleSignInClient.signOut() an?

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

Eine andere Option ist die Verwendung der Bibliothek FirebaseUI . Es vereinfacht die Operationen sign in und sign out in einem Sinn, dass es alle schweren Aufgaben für Sie erledigt.

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

          }
      });

Hoffe das hilft

6
ZooS

Für alle anderen Personen, die dieses Ergebnis (z. B. beim Zurückholen der Google-Kontooptionen) bei einer anderen Aktivität wünschen.

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

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

Fügen Sie dies auf der Anmeldeseite hinzu. Bevor Sie zur nächsten Aktivität übergehen, rufen Sie einfach SignOut() auf.

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

und dann können Sie in Ihrer anderen Klasse anrufen

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

Es ist einfach und es wird funktionieren. Prost!

3
Alex Barbu

Sie können auch so etwas definieren: 

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

Ich war verwirrt, da alle erforderlichen Lösungen einen Verweis auf GoogleSignInClient enthalten müssen, aber Sie müssen eigentlich keinen Verweis darauf haben. Sie können einfach eine neue Instanz erstellen und signOut() aufrufen. darauf.

GoogleSignIn.getClient(
    getContext(), 
    new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).build()
).signOut();
1
Simplici7y
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();
            }
        });
}

dieser Code ist so geschrieben, dass er als kopierte Datei funktioniert. Lesen Sie COMMENTS, um ihn an Ihre Bedürfnisse anzupassen

0
Sumer Singh

Ich habe mGoogleSignInClient.signOut() Das funktioniert wie erwartet.

0

sie können einen benutzerdefinierten Parameter für den GoogleAuthProvider festlegen, um den Benutzer zur erneuten Authentifizierung über Google zu zwingen.

var provider = new Firebase.auth.GoogleAuthProvider();
      provider.setCustomParameters({
        Prompt: 'select_account'
      });
0
Shib