我正在尝试从google plus api获取访问令牌。
我运行以下代码:
private class RetrieveTokenTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
String accountName = params[0];
Log.e("accountName", accountName);
String scopes = "oauth2:" + Scopes.PLUS_ME; //
String token = null;
try {
token = GoogleAuthUtil.getToken(getApplicationContext(), accountName, scopes);
} catch (IOException e) {
Log.e("GOOGLE+", e.getMessage());
} catch (UserRecoverableAuthException e) {
startActivityForResult(e.getIntent(), RC_SIGN_IN);
} catch (GoogleAuthException e) {
Log.e("GOOGLE+", e.getMessage());
}
return token;
}
@Override
protected void onPostExecute(String s) {
Log.d("TOKEN", "token: " + s);
}
}
我使用HTTP GET检查postman中的访问令牌 https://www.googleapis.com/oauth2/v1/userinfo 标题授权承载
结果:
{
id: "111111111111"
name: "my name"
given_name: "my"
family_name: "name"
link: https://plus.google.com/123456789
picture: https:....jpg
gender: "male"
}
如何获取用户的电子邮件?我需要使用什么范围?
答案 0 :(得分:3)
电子邮件的范围是
https://www.googleapis.com/auth/userinfo.email
哪个也需要com.google.android.gms.common.Scopes.PLUS_LOGIN
。
因此您可以将范围替换为
private static final String SCOPE = "oauth2:"
+ TextUtils.join(" ", new String[] { Scopes.PLUS_LOGIN,
"https://www.googleapis.com/auth/userinfo.email",
Scopes.PLUS_ME });
你可以使用
https://www.googleapis.com/auth/userinfo.profile
用于读取用户信息的范围(即姓名,名字/姓氏,个人资料图片,性别等)
答案 1 :(得分:3)
来自https://developers.google.com/+/api/oauth:
不建议将
https://www.googleapis.com/auth/plus.me
范围用作登录范围,因为对于尚未升级到Google+的用户,它不会返回用户的姓名或电子邮件地址。
相反,建议您使用profile
范围或https://www.googleapis.com/auth/plus.login
范围(可用作Scopes.PLUS_LOGIN
)。
另外您需要email
范围(这是范围的全名,不是网址格式),因此电子邮件地址将作为通话的一部分返回
您的范围定义可能类似于:
String scopes = "oauth2:email " + Scopes.PLUS_LOGIN;
或
String scopes = "oauth2:profile email";
https://www.googleapis.com/oauth2/v1/userinfo端点已被弃用,零星工作,并计划在9月删除。
相反,您应该使用https://www.googleapis.com/plus/v1/people/me(“我”代表经过身份验证的用户的用户ID),并为Authorization标头提供您之前使用的相同承载令牌。
有关弃用和迁移的详细信息,请参阅https://developers.google.com/+/api/auth-migration