从应用程序注销时删除帐户或无效的授权令牌?
问题描述:
我在我的应用中使用了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来显示登录页面。如果我应该调用其他方法,然后请告诉哪个方法来显示登录。
答
这取决于你想要什么确切的行为。没有授权令牌的情况下保留帐户的原因是什么?我脑海中只有存储凭证的即时重新认证。你可以在你的Authenticator的getAuthToken()
方法中实现逻辑。否则,您应该删除帐户,以便用户知道他已注销,并且必须再次输入登录/密码。
答
通常情况下,您的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;
}
对不起,我的无知,但我想你错过了其他部分代码导航到登录页面,如果访问令牌为空。 – blizzard