2

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

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

  1. setAccountName 没有任何有价值的效果(除了在错误的帐户设置时抛出异常),因为仍然会显示帐户选择器对话框
  2. 用户必须第二次登录(接受申请)

实际上,我想要的只是从 GoogleAuthUtil 中检索基本用户信息,例如用户个人资料图标和名称,以及他的电子邮件和令牌。

PS是的,有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 Service 应用程序,你仍然需要手动获取用户配置文件......

4

3 回答 3

2

如果您不想使用 PlusClient ,一种选择是使用您收到的令牌自己访问 REST api getToken()

https://developers.google.com/+/api/latest/people/get

然而,PlusClient 让您更轻松,因为它为您在 Java POJO 和 JSON 之间进行转换,为您管理缓存、离线访问和 OAuth 令牌。

如果您使用PlusClient.Builder.setAccountName()有效的 Google 帐户名称构建 PlusClient,则不应从显示帐户选择器的 PlusClient 返回意图。

此外,如果您在调用时请求相同的范围(您必须包含https://www.googleapis.com/auth/plus.login),getToken()并且当您构建 PlusClient 时,它不应要求用户再次同意。

于 2013-08-01T12:46:36.550 回答
2

“实际上,我想要的只是检索用户个人资料图标等基本用户信息”:

您可以通过一键式体验使用Auth.GOOGLE_SIGN_IN_API

如果您有服务器并且想要将用户信息传递到您的服务器,请确保使用ID 令牌流。

对于过去使用 GoogleAuthUtil / Plus.API / PlusClient 的所有人,请查看此Google 登录最佳实践博客文章,以确保安全性和最佳 UX。

于 2016-05-21T19:51:00.990 回答
1

也许您忘记匹配PlusClientand的范围getToken

new PlusClient
  .Builder(this, this, this)
  .setScopes(Scopes.PLUS_LOGIN, "https://www.googleapis.com/auth/userinfo.email")
  .build();
于 2013-08-13T21:40:00.910 回答