我有一个奇怪的问题。我正在使用谷歌身份验证,这适用于 android > 3.x
但我在 Samsung Handled(android 版本 2.3.3)上进行了测试,但userinfo.email
范围不起作用。
oauth2:https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
但经过一些试验,我发现了如何让它发挥作用。只需要交换范围:
oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile
这一直有效,直到我升级到 android 2.3.5 版本。之后,我无法获得有权获取用户电子邮件的令牌。我尝试仅使用电子邮件进行交换,但没有任何效果。
我的代码:
private static final String SCOPE = "oauth2:https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email";
am.getAuthToken(account, SCOPE, null, this, new AccountManagerCallback<Bundle>() {
public void run(AccountManagerFuture<Bundle> future) {
try {
Bundle result = future.getResult();
String token = result.getString(AccountManager.KEY_AUTHTOKEN);
Log.d(TAG, "Google tokenas: " + token);
authWithToken("google", token); //here I get working token, but this token don't have rights to grab user email
} catch (OperationCanceledException e) {
unsuccess();
} catch (AuthenticatorException e) {
unsuccess();
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}, new Handler(new Handler.Callback() {
public boolean handleMessage(Message msg) {
Log.d(TAG, "on error: " + msg.what);
return false;
}
}));
此方法在 android 4.0.4 和 4.1.x 上仍然有效。