我发现自定义AccountManager
的示例有些问题。
在getAuthToken(...)
方法中,无法强制刷新令牌或/并检查当前令牌是否已可用(如过期时间结束)。那么我如何在下面的代码中正确地做到这一点?
public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options) throws NetworkErrorException {
Log.d(TAG, "getAuthToken");
if (!authTokenType.equals(AccountGeneral.AUTHTOKEN_TYPE_FULL_ACCESS)) {
final Bundle result = new Bundle();
result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, true);
result.putString(AccountManager.KEY_ERROR_MESSAGE, "invalid authTokenType");
return result;
}
final AccountManager am = AccountManager.get(context);
String authToken = am.peekAuthToken(account, authTokenType);
Log.d(TAG, "peekAuthToken returned - " + authToken);
// If we get an authToken - we return it
if (!TextUtils.isEmpty(authToken)) {
final Bundle result = new Bundle();
result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, true);
result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
result.putString(AccountManager.KEY_AUTHTOKEN, authToken);
return result;
}
return authenticate(response, account.name, false);
}
我认为这是对#34;强迫"刷新令牌,我应该在选项包中传递一些参数(如布尔"FORCE_REFRESH_TOKEN"
)并检查它是否为真,以尝试使用refreshtoken
获取新令牌。但我不确定那样。
要检查令牌是否已过期,我看到的唯一方法是从帐户用户数据(使用getUserData
)或CredentialStore
获取过期时间。话虽如此,是否可以将凭证保存在CredentialStore
中?