GoogleAuthUtil和PlusClient

时间:2013-08-01 12:06:06

标签: android google-plus

根据https://gist.github.com/ianbarber/5170508,您应该使用PlusClient进行连接,然后才能使用GoogleAuthUtil获取令牌。

但是在我的应用程序中,我有一个落后的场景:我已经通过GoogleAuthUtil.getToken(app,email,GOOGLE_AUTH_SCOPE)获得了令牌。当我试图使用PlusClient时,会发生两件事:

  1. setAccountName没有任何有价值的效果(除非在设置错误的帐户时抛出异常),因为仍会显示帐户选择器对话框
  2. 用户必须第二次登录(接受申请)
  3. 实际上,我想要的只是检索基本用户信息,例如用户个人资料图标和带有来自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服务应用程序,你仍然需要手工获取用户档案......

3 个答案:

答案 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)

也许您忘了匹配PlusClientgetToken的范围:

new PlusClient
  .Builder(this, this, this)
  .setScopes(Scopes.PLUS_LOGIN, "https://www.googleapis.com/auth/userinfo.email")
  .build();