根据https://gist.github.com/ianbarber/5170508您应该与 PlusClient 连接,然后才使用 GoogleAuthUtil 获取 token 。
但在我的应用程序中,我有向后的情况:我已经通过 GoogleAuthUtil.getToken(app, email, GOOGLE_AUTH_SCOPE) 获得了 token 。当我尝试使用 PlusClient 时,会发生两件事:
- setAccountName 没有任何有值(value)的作用(除非在错误的帐户设置时抛出异常),因为帐户选择器对话框仍会显示
- 用户必须再次登录(接受申请)
实际上,我想要的只是从 GoogleAuthUtil 检索基本的用户信息,例如用户个人资料图标和姓名,以及他的电子邮件和 token 。
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 服务应用,但您仍然需要手动获取用户个人资料...
最佳答案
如果您不想使用 PlusClient,一个选项是使用从 getToken()
收到的 token 自行访问 REST api:
https://developers.google.com/+/api/latest/people/get
然而,PlusClient 使这对您来说变得更加容易,因为它为您在 Java POJO 和 JSON 之间进行转换,为您管理缓存、离线访问和 OAuth token 。
如果您使用 PlusClient.Builder.setAccountName()
和有效的 Google 帐户名构建 PlusClient,则不应从 PlusClient 获得显示帐户选择器的 Intent 。
此外,如果您在调用 getToken()
时请求相同的范围(必须包含 https://www.googleapis.com/auth/plus.login ),并且当您构造 PlusClient 时,它不应该要求用户再次同意.
关于android - GoogleAuthUtil 和 PlusClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17993587/