【问题标题】:Why does PlusClient.loadPeople fail with HTTP 403 error?为什么 PlusClient.loadPeople 会因 HTTP 403 错误而失败?
【发布时间】:2013-03-04 22:53:22
【问题描述】:

我将旧的 Google Plus(又名 Google Play 服务)API 集成到我的应用程序中,现在我正在尝试更新内容以使用 V2 API,其中包括访问人的圈子。

从表面上看,我应该做的唯一更改是更新我用来进行身份验证的 OAuth 配置文件:

    _plusClient = new PlusClient.Builder(_activity, this, this).
        setScopes(Scopes.PLUS_LOGIN).build();

然后(在进行必要的环跳以确保事物连接之后),向用户的朋友发出请求:

        _plusClient.loadPeople(new PlusClient.OnPeopleLoadedListener() {
            public void onPeopleLoaded (ConnectionResult status, PersonBuffer people,
                                        String nextPageToken) {
                // ...
            }
        }, com.google.android.gms.plus.model.people.Person.Collection.VISIBLE);

但是,这会导致报告ConnectionResult.NETWORK_ERROR。我可以在 Android 日志中看到以下内容:

 E/Volley  (13590): [4053] BasicNetwork.performRequest: Unexpected response code 403 for https://www.googleapis.com/plus/v1/people/me/people/visible?maxResults=100&orderBy=alphabetical

我的旧代码在使用 PlusClient 获取 OAuth 自动令牌(通过 GoogleAuthUtil.getToken)后手动发出 REST 请求。因此,为了获取用户的基本个人资料信息,我最终发出了一个 HTTP 请求,如下所示:

https://www.googleapis.com/oauth2/v1/userinfo?auth_token=XXX

这对userinfo 非常有效,并继续为userinfo 使用V2 代码。但是,如果我尝试通过 REST API 手动获取用户的可见人员,请求如下:

https://www.googleapis.com/plus/v1/people/me/people/visible?auth_token=XXX

我收到带有以下 JSON blob 的 403 响应:

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

根据我通过文档收集到的信息,无需获取和配置 Google API 密钥即可通过 Google Play 服务代码将 Google Plus 集成到 Android 应用程序中。实际上,API 中没有任何地方可以提供这样的密钥,这证实了这种怀疑。

我碰巧有一个 Google API 密钥连接到我用于 GCM 的 Android 应用。万一该 API 密钥以某种方式混淆了所有这些,我已确保为该 API 密钥启用了 Google+,但这并没有使 403 响应神奇地消失。

我已经通过嵌入在 REST API docs for Google+ 中的 API 资源管理器测试了 https://www.googleapis.com/plus/v1/people/me/people/visible 请求,它在那里工作。我可以在 JSON 结果中看到我圈子中的人。

我注意到这些请求似乎在 URL 上添加了一个 API 密钥:

https://www.googleapis.com/plus/v1/people/me/people/visible?key=AIzaSyCFj15TpkchL4OUhLD1Q2zgxQnMb7v3XaM

因此,我尝试为我的 Android 应用程序创建一个 API 密钥(使用与 GCM 相同的 Google API 项目),并将其附加到手动尝试加载好友列表的代码中的 URL 上。此请求失败并出现 401 错误,说明授权信息错误。我假设我从 Google Plus SDK 代码返回的身份验证令牌是通过不同的“API 项目”(可能是 Android Google Plus 应用程序使用的那个)获得的,当我传递我自己的密钥时,事情变得很不稳定.

到目前为止,我还没有尝试消除对 Google Play 服务 Google+ SDK 的所有使用,而是自己获取 OAuth 访问令牌。我宁愿希望这能奏效,而且我不必浪费太多时间来调查它。所以也许宇宙中的某个人已经让这些 Google+ 东西正常工作,或者可以为我指明一个有用的方向。

【问题讨论】:

  • 您要求的范围是多少?有一个新范围 plus.login,它是 userinfo 范围的超集。
  • 是的,这就是我正在使用的范围。
  • 您可能需要尝试 Android 快速入门,以确保您的环境已设置并且您拥有最新版本的 Google Play 服务:developers.google.com/+/quickstart/android

标签: android google-plus


【解决方案1】:

您是否在 Google API 控制台中注册了经过数字签名的 .apk 文件的公共证书?如果没有,您可以找到有关如何操作的说明here。

【讨论】:

  • 啊,我错过了那个页面,已经为 v1.0 设置了 Google+ API。谢谢!
  • 确实如此。您将仅通过签名的 APK 获得此信息。
  • 我需要用jarsigner签名apk吗
【解决方案2】:

确保您已添加 google+ api 访问权限。以及使用 SHA1 创建的客户端密钥和 android 清单文件中的完整项目包

【讨论】:

    猜你喜欢
    • 2016-06-25
    • 1970-01-01
    • 2015-07-02
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多