1

我有点困惑。使用 Google+ Android SDK 将用户登录到我的应用程序并获取他的个人资料详细信息。https://developers.google.com/+/api/oauth上的手册清楚地说明了

您不应请求userinfo.profileplus.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范围时,就像谷歌说你不应该那样,我得到了用户个人资料详细信息的良好响应。

谷歌发生了什么?

4

3 回答 3

1

这很棘手,使用以下范围

scope = https://www.googleapis.com/auth/userinfo.email+profile

如果需要,请不要忘记投票。

于 2015-11-19T08:03:57.493 回答
0

我不知道为什么,但显然你不能在同一个 api 调用中获得电子邮件和用户的个人资料。

在询问plus.loginuserinfo.email范围时,您应该首先使用访问令牌调用https://www.googleapis.com/oauth2/v2/userinfo端点并获取电子邮件地址。
然后,如果您想要用户的个人资料详细信息,则需要调用https://www.googleapis.com/plus/v1/people/me端点(当然使用访问令牌)。

这使它变得不必要的复杂,谷歌?

于 2013-09-22T13:38:12.827 回答
0

我发现我使用以下范围收到了电子邮件和个人资料:

' https://www.googleapis.com/auth/plus.login '、'电子邮件'、'个人资料'

于 2014-01-22T06:36:17.000 回答