2013-03-04 115 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清單文件中的完整項目包