2013-03-04 103 views
4

我已将旧的Google Plus(又名Google Play服务)API集成到我的应用程序中,现在我正在尝试更新使用V2 API的东西,其中包括访问人员列表中的人员列表界。为什么PlusClient.loadPeople出现HTTP 403错误?

从表面上看,只有我不得不做出改变来更新我使用验证的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 

这peachily工作了userinfo并继续为userinfo与V2代码工作。但是,如果我尝试通过REST API手动获取用户可见的人,用类似下面的要求:

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

我得到一个403响应,其具有以下JSON斑点:

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

从我可以通过文档搜集到的内容,不需要获取和配置Google API密钥,以便通过Google Play Services代码将Google Plus集成到Android应用中。事实上,API没有提供这样一把钥匙,这证实了这种怀疑。

我恰好有一个Google API密钥连接到我的Android应用程序GCM。由于这个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密钥的使用,我使用相同的谷歌API项目对于GCM),并将其添加到手动尝试加载好友列表的代码中的URL中。该请求因401错误而失败,说明授权信息不正确。我假设我从Google Plus SDK代码中获取的身份验证令牌以某种方式通过不同的“API项目”获得(如可能是Android Google Plus应用使用的项目),并且当我传递自己的密钥时, 。

我到目前为止还没有去尝试消除所有对Google Play服务Google+ SDK的使用,而只是自己获取OAuth访问令牌。我只是希望这会起作用,我不必浪费太多时间来调查它。因此,也许宇宙中的某个人或者已经获得了Google+信息,或者可以指出我的方向。

+0

您请求的范围是什么?有一个新的作用域,plus.login,它是userinfo作用域的超集。 – class 2013-03-05 00:44:01

+0

是的,这就是我正在使用的范围。 – samskivert 2013-03-05 03:43:25

+0

您可能想要试用Android快速入门以确保您的环境已设置并且您拥有最新版本的Google Play服务:https://developers.google.com/+/quickstart/android – class 2013-03-05 18:06:03

回答

8

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

+0

啊,我错过了页面,已经建立了Google+ API for v1。谢谢! – samskivert 2013-03-05 21:38:09

+0

这是真的。您只会收到带有签名APK的信息。 – 2013-03-14 08:57:33

+0

我是否需要用jarsigner签名apk – dd619 2013-05-22 14:33:57

0

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