我有点困惑。使用Google+ Android SDK将用户登录到我的应用并获取其个人资料详细信息。 https://developers.google.com/+/api/oauth上的手册清楚地说明了
您应该不请求
userinfo.profile
或plus.me
与plus.login
范围结合使用,因为它们是隐式包含的,会为您的用户创建一个令人困惑的权限对话框。
所以我只询问plus.login
范围(和userinfo.email
范围,但这没有关系)。尝试通过调用
https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ACCESS_TOKEN
以下是我的回复:
{
"issued_to": "534771845378-3668o318pburvuhrukgj7pao3ir****.apps.googleusercontent.com",
"audience": "534771845378-3668o318pburvuhrukgj7pao****.apps.googleusercontent.com",
"user_id": "106027222137637*****",
"scope": "https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.email",
"expires_in": 2279,
"email": "****@****.com",
"verified_email": true,
"access_type": "online"
}
以下是我通过调用
尝试获取用户个人资料的响应https://www.googleapis.com/oauth2/v2/userinfo?access_token=ACCESS_TOKEN
{
"id": "10602722213763777****",
"email": "****@****.com",
"verified_email": true,
"hd": "****.com"
}
显然,您可以看到此响应中没有任何用户个人资料详细信息。
当我添加userinfo.profile
范围时,就像谷歌说你不应该一样,我对用户的个人资料详细信息得到了很好的回复。
Google上发生了什么?
答案 0 :(得分:0)
我不知道为什么,但显然你无法在同一个api电话中收到电子邮件和用户的个人资料。
在询问plus.login
和userinfo.email
范围时,您应首先使用访问令牌调用https://www.googleapis.com/oauth2/v2/userinfo
端点并获取电子邮件地址。
然后,如果您需要用户的个人资料详细信息,则需要调用https://www.googleapis.com/plus/v1/people/me
端点(当然还有访问令牌)。
这使得它不必要地变得复杂,谷歌?
答案 1 :(得分:0)
我发现我使用以下范围获得了电子邮件和个人资料:
'https://www.googleapis.com/auth/plus.login','email','个人资料'
答案 2 :(得分:0)
这很棘手,请使用以下范围
scope = https://www.googleapis.com/auth/userinfo.email+profile
如果需要,请不要忘记upvote。