我在我的应用中使用了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。
答案 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;
}