2014-03-31 86 views
3

我在我的應用中使用了android AccountManager。在初始屏幕中,我撥打getTokenForAccountCreateIfNeeded以獲取身份驗證令牌或顯示登錄屏幕,但沒有帳戶存在於應用程序中。從應用程序註銷時刪除帳戶或無效的授權令牌?

private void getTokenForAccountCreateIfNeeded(String accountType, String authTokenType) { 
    final AccountManagerFuture<Bundle> future = mAccountManager.getAuthTokenByFeatures(accountType, authTokenType, null, this, null, null, 
      new AccountManagerCallback<Bundle>() { 
       @Override 
       public void run(AccountManagerFuture<Bundle> future) { 
        Bundle bnd = null; 
        try { 
         bnd = future.getResult(); 
         final String authtoken = bnd.getString(AccountManager.KEY_AUTHTOKEN); 
         LogUtils.ShowToast(SplashScreen.this, authtoken); 
         if(authtoken!=null) 
         { 
          goToHomePage(); 
         } 

        } catch (Exception e) { 
         e.printStackTrace(); 

        } 
       } 
      } 
    , null); 
} 

當註銷按下我叫

AccountManager manager = AccountManager.get(HomeActivity.this); 
      manager.invalidateAuthToken(Constants.CONTENT_AUTHORITY,preferences.getString(Constants.AUTH_TOKEN,"")); 

刪除的authToken。並且身份驗證令牌被刪除。

現在,當我回到初始屏幕並調用getTokenForAccountCreateIfNeeded時,它將返回一個空包。所以訪問令牌爲空沒有任何反應。

我應該在用戶註銷時刪除帳戶,還是應該在訪問令牌爲空時調用somthing else來顯示登錄頁面。如果我應該調用其他方法,然後請告訴哪個方法來顯示登錄。

+0

對不起,我的無知,但我想你錯過了其他部分代碼導航到登錄頁面,如果訪問令牌爲空。 – blizzard

回答

0

這取決於你想要什麼確切的行爲。沒有授權令牌的情況下保留帳戶的原因是什麼?我腦海中只有存儲憑證的即時重新認證。你可以在你的Authenticator的getAuthToken()方法中實現邏輯。否則,您應該刪除帳戶,以便用戶知道他已註銷,並且必須再次輸入登錄/密碼。

0

通常情況下,您的AccountAuthenticator應返回getAuthToken(...)如果無法獲得Auth令牌,則使用Login-Activity的Intent。請檢查你的實現(最後的例子)。

刪除帳戶可以刪除任何連接的數據。例如,刪除聯繫人帳戶將刪除已分配的RawContacts。這就是爲什麼我認爲如果用戶再次使用該帳戶,最好保留該帳戶。

@Override 
public Bundle getAuthToken(...) { 
    // get Auth Token and return Bundle with AuthToken... 
    // otherwise 
    return startLoginView(...) 
} 

private Bundle startLoginView(AccountAuthenticatorResponse response) { 
    final Intent intent = new Intent(mContext, YourLoginActivity.class); 
    intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, 
      response); 
    final Bundle bundle = new Bundle(); 
    bundle.putParcelable(AccountManager.KEY_INTENT, intent); 
    return bundle; 
} 
相關問題