从应用程序注销时删除帐户或使身份验证令牌无效?

时间:2014-03-31 12:42:51

标签: android accountmanager

我在我的应用中使用了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时,它会返回一个空包。因此访问令牌为空时没有任何反应。

我应该在用户注销时删除帐户,还是应该在访问令牌为空时调用其他内容来显示登录页面。如果我应该调用其他方法,那么请告诉哪个方法调用show login。

2 个答案:

答案 0 :(得分:0)

这取决于你想要的确切行为。保留帐户没有身份验证令牌的原因是什么?我只想到存储凭据的即时重新身份验证。您可以在Authenticator的getAuthToken()方法中实现逻辑。否则,您应该删除该帐户,以便用户知道他已注销并且必须再次输入login / pass。

答案 1 :(得分:0)

如果无法获得Auth-Token,通常您的AccountAuthenticator应该在getAuthToken(...)中返回与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;
}