为什么PlusClient.loadPeople因HTTP 403错误而失败?

时间:2013-03-04 22:53:22

标签: android google-plus

我将旧版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很有用,并且继续使用V2代码为userinfo工作。但是,如果我尝试通过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密钥在某种程度上混淆了所有这一切,我确保Google+已启用该API密钥,但这并没有让403响应神奇地消失。

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

我注意到这些请求似乎有一个API密钥写在URL上:

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 Services Google+ SDK的使用,只是自己获取OAuth访问令牌。我本来希望这会起作用,我不必浪费那么多时间来调查它。因此,也许宇宙中的某个人要么将这个Google+内容发挥作用,要么指出我有用的方向。

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:0)

make sure you have added the google+ api access. and client key created with SHA1 and complete project package in android manifest file