8

忘記用戶當我打電話mFirebaseAuth.signOut()mFirebaseUser.delete()FirebaseAuth.AuthStateListener()作品正確,並用onAuthStateChanged返回nullFirebaseUser情況下,我刷新界面,並顯示「在與谷歌」按鈕。谷歌火力地堡登出,並在Android應用

但是當我想再次登錄時,我沒有看到與用戶(我的設備上有2個用戶,附加圖像)的彈出窗口。該應用僅在首次登錄時顯示此彈出窗口,之後它將使用同一用戶。如果我在設置屏幕上清除應用程序的數據,我將能夠再次看到該彈出窗口。

我的問題是如何在每次退出後顯示此彈出窗口。

enter image description here

我跑的時候這個代碼按下登錄鍵:

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

onActivityResult(),我得到的GoogleSignInResult一個實例,這樣我需要的一切發生了,我叫startActivityForResult()後。

+0

代碼或者它並沒有發生。讓我們看看你的邏輯顯示彈出。 –

+0

快速猜測:調用'signOut()'向用戶簽名我們的Firebase身份驗證。它不會將用戶從底層的社交提供商(例如Facebook,Google)上簽名。因此,下次您啓動該提供商的登錄流程時,它將立即被您的代碼(或您使用的庫)提取。但是,如果您展示[再現問題的最小代碼](http://stackoverflow.com/help/mcve),那麼說出來會更容易。 –

+0

通過將您的代碼與[Firebase Auth快速入門項目](https://github.com/firebase/quickstart-android/tree/master/auth)進行比較,您可能會得到一些線索。當我使用Google Signin運行它時,每次都會顯示帳戶選擇器對話框。不知道對於Twitter,Facebook等是否屬實。 –

回答

22

Firebase Auth Quickstart sample code中,Google提供商的註銷包括這些步驟。您在註銷時是否撥打Auth.GoogleSignInApi.signOut()

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

    // Google sign out 
    Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
      new ResultCallback<Status>() { 
       @Override 
       public void onResult(@NonNull Status status) { 
        updateUI(null); 
       } 
      }); 
} 
+0

不,我沒有調用'Auth.GoogleSignInApi.signOut()'。非常感謝,現在起作用。 – GrafOrlov

+0

好找@qbix!我忘了快速啓動代碼的一部分。 –

+0

信用真的要交給你@FrankvanPuffelen。你之前的評論讓我走上了這條路。 –

2

對於任何其他想要此結果的人(如在獲取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)); 

這很容易,它會工作。乾杯!

+0

它的作品...謝謝@亞歷Barbu –

2

另一種選擇是使用FirebaseUI庫。它簡化了登錄註銷操作在某種意義上它將爲您完成所有繁重工作。

科特林

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 

      } 
     }); 

希望這有助於

0

您還可以定義是這樣的:

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); 
       } 
      }); 
} 
0
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(this, gso); 
    mGoogleSignInClient.signOut().addOnCompleteListener(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(); 
      } 
     }); 
} 

這個代碼編寫工作,因爲複製過去只是讀評論代碼進行定製以UR需要,我寧願發送用戶登錄