在JellyBean设备上。
我正在关注this请求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
。{/ li>中添加令牌
run
之前再次请求帐户登录,因此始终在run
。没有能力尝试视网膜扫描,所以有点不知所措。
编辑1 我遇到的问题是,我可能会遇到一个KEY_INTENT
的情况,所以我宁愿现在测试这段代码路径,而不是当它出现时该领域。
提前致谢。
彼得。
答案 0 :(得分:4)
有机会在项目上做类似的事情。这与您的代码并不完全相同,我仍然说回调文档有太多'maybes'可以确定它应该如何工作,但是如果您使用this method传递false
{ {1}},如果您更改密码或启用2FA,您将获得重新登录屏幕的意图。这适用于ClientLogin,但应该与OAuth 2类似(不测试)。类似的东西:
notifyAuthFailure
答案 1 :(得分:1)
我认为您需要拨打getResult()
,如下所示:
Intent launch = (Intent)result.getResult().get(AccountManager.KEY_INTENT);
答案 2 :(得分:0)
您正在使用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