【问题标题】:Android PlusClient implementation & getting a tokenAndroid PlusClient 实现 & 获取令牌
【发布时间】:2013-04-03 17:21:23
【问题描述】:

所以我实现了 google plus login 到我的应用程序...我的实现非常接近给定 here 的示例。我和他最大的不同是我需要更大的范围。在构建我的 plusclient 时,我指定了以下范围:

    "https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/plus.me https://www.google.com/m8/feeds https://www.googleapis.com/auth/userinfo.email"

稍后在我的 onConnected 方法中,我尝试从我的会话中获取一个访问令牌,以便传递给我们的服务器,在那里我们进行真正的肉类和土豆工作。

    GoogleAuthUtil.getToken(SplashActivity.this, mPlusClient.getAccountName(), "oauth2: https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/plus.me https://www.google.com/m8/feeds https://www.googleapis.com/auth/userinfo.email")

这确实会产生一个访问令牌。耶!正确的?没有。当我们尝试使用这个令牌时,它似乎与我们的应用程序无关。当通过谷歌的 tokeninfo 端点运行令牌时,我们得到了一些类似

{
 "issued_to": "608941808256-43vtfndets79kf5hac8ieujto8837660.apps.googleusercontent.com",
 "audience": "608941808256-43vtfndets79kf5hac8ieujto8837660.apps.googleusercontent.com",
 "user_id": "107245641469745809180",
 "scope": "https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.profile https://www.google.com/m8/feeds https://www.googleapis.com/auth/userinfo.email",
 "expires_in": 3577,
 "email": "redacted@email.com",
 "verified_email": true,
 "access_type": "online"
}

issued_to 值与我们的任何客户 ID 都不匹配。根据this blog post 的最后一部分,谷歌无法将此令牌请求与我们的项目匹配。但是,在我们的 API 控制台中,我确实有 SHA 指纹用于 android,并且它确实与包名称用分号分隔。没有拼写错误。我已经等了几个小时,看看这是否是传播问题。我还添加了 SHA 指纹等来为我们的调试密钥库创建一个客户端 ID。无论是从 eclipse 中导出签名的 apk 还是直接运行它,我们都会遇到同样的问题。

这让我发疯了。我不知道该怎么办。

例如,当调用

googleapis.com/plus/v1/people/me/people/visible?access_token=TOKEN_HERE&maxResults=100&pageToken=&alt=json&orderBy=best

我明白了

{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "accessNotConfigured",
    "message": "Access Not Configured"
   }
  ],
  "code": 403,
  "message": "Access Not Configured"
 }
}

因为无论出于何种原因,谷歌都没有将该令牌与我的项目相关联。

【问题讨论】:

  • 这让我发疯了。我似乎无法解决它。

标签: android google-api oauth-2.0 google-plus


【解决方案1】:

到目前为止,这只是 google api 中的一个错误。

如果我取出“https://www.google.com/m8/feeds”范围,那么一切正常,并且令牌与我们的项目成功关联。如果“https://www.google.com/m8/feeds”作为请求的范围包含在内,那么尽管它会正确提示用户获得该特定权限,但 api 端的一切都会中断。虽然我们在请求这个范围的时候还是会得到一个token,但是这个token并没有和我们的项目关联。

【讨论】:

  • 对于其他所有人,您需要在该 URL 上添加一个斜杠:“google.com/m8/feeds - 如果没有它,它将无法匹配范围,并给出错误。
  • 非常感谢您的帮助。哇。我只能说哇。一个缺失的斜线。哈哈。我坚持认为这是 api 中的一个错误。当请求此范围时不带斜杠时,它会解析并通知该权限页面中的用户我们正在请求此权限,但是令牌与我们的应用程序的链接中断了......无论哪种方式,谢谢谢谢谢谢:-)
  • 另外,有趣的是......当您运行通过该 tokeninfo 端点使用或不使用斜线后获得的令牌时,它实际上显示了关联范围列表中带有和不带有斜线的范围。也许有两个 m8/feeds 范围正在解析?
【解决方案2】:
 String accessToken = GoogleAuthUtil.getToken(getActivity(), plusClient.getAccountName(),    
 "oauth2:" + Scopes.PLUS_LOGIN + " " + Scopes.PLUS_PROFILE + " " + MY_SCOPE);

我的代码有效。也许你在“oauth2:”之后有不必要的标签

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
相关资源
最近更新 更多