![](/img/trans.png)
[英]How does AccountManager.KEY_INTENT looks like within TaskSample sample code
[英]Never get AccountManager.KEY_INTENT from getAuthToken request
在JellyBean设备上。
我正在关注此请求oauth2令牌,例如
AccountManager am = AccountManager.get(getActivity());
am.invalidateAuthToken(MY_AUTH_TOKEN_TYPE, null);
am.getAuthToken(aGoogleAccount, MY_AUTH_TOKEN_TYPE, null, this,
new OnTokenAcquired(), new Handler(new OnError()));
然后按照后面的代码示例进行检查:
private class OnTokenAcquired implements AccountManagerCallback<Bundle> {
@Override
public void run(AccountManagerFuture<Bundle> result) {
Bundle bundle = result.getResult();
...
Intent launch = (Intent) bundle.get(AccountManager.KEY_INTENT);
if (launch != null) {
startActivityForResult(launch, 0);
return;
}
}
}
我从未得到过KEY_INTENT。 我理解以下内容:
验证者返回Intent可能有很多原因。 这可能是用户首次登录此帐户。 也许用户的帐户已过期,他们需要再次登录,或者他们存储的凭据可能不正确。 也许该帐户需要双因素身份验证,或者需要激活相机才能进行视网膜扫描。 理由是什么并不重要。 如果你想要一个有效的令牌,你将不得不触发Intent来获取它。
但是, getAuthToken
始终会导致权限屏幕或登录屏幕出现在代码到达run
方法之前,此时令牌有效。 我试过了:
run
之前请求帐户登录,因此始终在run
具有令牌。 run
之前再次请求帐户登录,因此始终在run
具有令牌。 没有能力尝试视网膜扫描,所以有点不知所措。
编辑1我遇到的问题是可能存在一个我将获得KEY_INTENT
,所以我宁愿现在测试这个代码路径,而不是当它在现场时。
提前致谢。
彼得。
有机会在项目上做类似的事情。 这与你的代码并不完全相同,我仍然说回调文档有太多'maybes'来确定它应该如何工作,但是如果你使用这个方法为notifyAuthFailure
传递false
,你会得到一个意图如果您更改密码或启用2FA,则重新登录屏幕。 这适用于ClientLogin,但应该与OAuth 2类似(不测试)。 就像是:
// using Calendar ClientLogin for simplicity
Bundle authResult = am.getAuthToken(account, "cl", false, null, null).getResult();
if (authResult.containsKey(AccountManager.KEY_INTENT)) {
Intent authIntent = authResult.getParcelable(AccountManager.KEY_INTENT);
// start activity or show notification
}
我想你需要调用getResult()
,如下所示:
Intent launch = (Intent)result.getResult().get(AccountManager.KEY_INTENT);
您正在使用getAuthToken的版本,该版本使用Activity来调用访问授权提示。 该版本的getAuthToken不返回intent,因为提供的活动用于启动相应的intent。 如果要手动启动intent,请使用API级别14中不推荐使用的getAuthToken版本。有关详细信息,请参阅以下内容: http : //developer.android.com/reference/android/accounts/AccountManager.html#getAuthToken %28android.accounts.Account,%20java.lang.String,%20boolean,%20android.accounts.AccountManagerCallback%3Candroid.os.Bundle%3E,%20android.os.Handler%29
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.