2014-03-31 60 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; 
} 
相关问题