web-dev-qa-db-ja.com

Google Firebaseからログアウトして、Android app

mFirebaseAuth.signOut()またはmFirebaseUser.delete()を呼び出すと、私のFirebaseAuth.AuthStateListener()は正しく動作し、nullFirebaseUserインスタンスとしてonAuthStateChangedを返します。 UIを更新し、「Googleでサインイン」ボタンを表示します。

しかし、再度ログインする場合、ユーザーとのダイアログは表示されません(デバイスに2人のユーザーがいて、画像が添付されています)。アプリはこのダイアログを最初のサインインでのみ表示し、その後は同じユーザーを使用します。設定画面でアプリのデータを消去すると、このダイアログが再び表示されます。

私の質問は、サインアウトするたびにこのダイアログを表示する方法です。

enter image description here

サインインボタンを押したときにこのコードを実行します。

// in onCreate()
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();

// in OnClickListener
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
            startActivityForResult(signInIntent, FirebaseActivity.REQUEST_SIGN_IN);

onActivityResult()GoogleSignInResultのインスタンスを取得するため、startActivityForResult()を呼び出した後に必要なすべてが発生します。

21
GrafOrlov

Firebase Auth Quickstartサンプルコード では、Googleプロバイダーのサインアウトにこれらの手順が含まれています。サインアウトするときにGoogleSignInClient.signOut()を呼び出していますか?

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);
                }
            });
}
36
Bob Snyder

別のオプションは、 FirebaseUI ライブラリを使用することです。それは、サインインおよびサインアウト操作を簡素化するという意味ですあなたのためにすべての重い持ち上げを行います。

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

          }
      });

お役に立てれば

9
ZooS

別のアクティビティでこの結果が必要な場合(Googleアカウントのオプションを取り戻す場合など)。

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

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

これをサインインページに追加し、次のアクティビティに進む前に、SignOut()を呼び出します。

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

そして、あなたの他のクラスで呼び出すことができます

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

簡単で、うまくいきます。乾杯!

3
Alex Barbu

次のようなものも定義できます。

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

すべてのソリューションにはGoogleSignInClientへの参照が必要なので混乱しましたが、実際に参照を保持する必要はありません。新しいインスタンスを作成してsignOut()

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

このコードは、過去のコピーとして機能するように書かれています[〜#〜] comments [〜#〜]コードでそれをカスタマイズしてurのニーズに合わせます。

0
Sumer Singh

私はmGoogleSignInClient.signOut()をしました。これは期待通りに機能しています。

0

googleAuthProviderのカスタムパラメータを設定して、ユーザーにGoogle経由での再認証を強制することができます。

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