根据https://gist.github.com/ianbarber/5170508,您应该使用PlusClient进行连接,然后才能使用GoogleAuthUtil获取令牌。
但是在我的应用程序中,我有一个落后的场景:我已经通过GoogleAuthUtil.getToken(app,email,GOOGLE_AUTH_SCOPE)获得了令牌。当我试图使用PlusClient时,会发生两件事:
实际上,我想要的只是检索基本用户信息,例如用户个人资料图标和带有来自GoogleAuthUtil的电子邮件和令牌的名称。
P.S。是的,有http://developer.android.com/guide/topics/providers/contacts-provider.html#UserProfile,但仅适用于API 14
更新
我仍然不知道GoogleAuthUtil和PlusClient如何连接以及如何强制它们一起工作。唯一可行的解决方案(在GMS示例中找到)是获取https://www.googleapis.com/oauth2/v1/userinfo?access_token=token
但这很奇怪 - 你在设备上安装了600KB的库类+ Google Play服务应用程序,你仍然需要手工获取用户档案......
答案 0 :(得分:2)
如果您不想使用PlusClient ,一个选项是使用您从getToken()
收到的令牌自行点击REST API:
https://developers.google.com/+/api/latest/people/get
然而,PlusClient使您更容易,因为它可以为您在Java POJO和JSON之间进行转换,为您管理缓存,离线访问和OAuth令牌。
如果使用带有有效Google帐户名称的PlusClient.Builder.setAccountName()
构建PlusClient,则不应从显示帐户选择器的PlusClient获取意图。
此外,如果您在调用getToken()
时请求相同的范围(必须包括https://www.googleapis.com/auth/plus.login),并且在构建PlusClient时,不应要求用户再次同意。
答案 1 :(得分:2)
"实际上,我想要的只是检索基本用户信息,例如用户个人资料图标":
您可以轻松使用Auth.GOOGLE_SIGN_IN_API。
如果您有服务器并且想要将用户信息传递到服务器,请确保使用ID token flow。
对于过去使用GoogleAuthUtil / Plus.API / PlusClient的所有人,请查看此Google Sign-In best practice blog post以确保安全性和最佳用户体验。
答案 2 :(得分:1)
也许您忘了匹配PlusClient
和getToken
的范围:
new PlusClient
.Builder(this, this, this)
.setScopes(Scopes.PLUS_LOGIN, "https://www.googleapis.com/auth/userinfo.email")
.build();