2013-04-11 46 views
5

所以我實施谷歌加登錄到我的應用程序...我的執行非常緊密遵循給出的例子here。我和他之間最大的區別是我有一套我需要的範圍更大的範圍。建設我的plusclient當我指定以下範圍:Android 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方法我試圖爲了從我的會議上得到的accessToken傳遞到我們的服務器,我們做真正的肉&馬鈴薯工作。

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") 

這確實產生了一個accesstoken。 YIPPEE!對?不。當我們嘗試並使用此令牌時,似乎它與我們的應用程序無關。通過谷歌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": "[email protected]", 
"verified_email": true, 
"access_type": "online" 
} 

是ISSUED_TO值不與任何我們的客戶的id的匹配線的東西。根據this blog post的最後部分,Google無法將此令牌請求與我們的項目匹配。然而,在我們的API控制檯中,我確實在那裏有用於android的SHA指紋,它確實與包名稱用分號分隔。沒有拼寫錯誤。我等了幾個小時,看看這是否是一個傳播問題。我還添加了SHA指紋,以及爲我們的調試密鑰庫創建clientid的東西。無論我們是否從eclipse中導出已簽名的apk或直接運行它,我們都有同樣的問題。

這讓我瘋狂。我不知道該在哪裏轉身。

作爲一個例子,使至

呼叫googleapis.com/plus/v1/people/me/people/visible?access_token=TOKEN_HERE當&的maxResults = 100 & pageToken = & ALT = JSON & ORDERBY =最好

我得到

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

,因爲谷歌因爲種種原因沒有與我的項目,令牌關聯。

+0

這使我瘋狂。我似乎無法解決它。 – frostymarvelous 2015-03-18 09:23:47

回答

2

到目前爲止,這可能是你在google api中遇到的一個bug。

如果我拿出「https://www.google.com/m8/feeds」範圍,那麼一切正常,令牌與我們的項目成功關聯。如果包含「https://www.google.com/m8/feeds」作爲請求範圍,則儘管它會提示用戶正確獲取該特定權限,但api端的所有內容都會中斷。儘管我們在請求這個範圍時仍然可以獲得令牌,但令牌與我們的項目沒有關聯。

+2

僅適用於其他人,您需要跟蹤該網址上的斜槓:「https://www.google.com/m8/feeds/ - 如果沒有它,將無法匹配範圍,並提供錯誤。 – 2013-04-19 10:10:24

+0

我真的很感謝你的幫助。哇。我只能說是哇。一個缺少的斜線。哈哈。然而,我認爲這是api中的一個錯誤。當請求這個作用域而沒有結尾的斜線時,它會解析並通知那個權限頁面中的用戶,我們正在請求這個權限,但是這些令牌與我們的應用程序之間的聯繫中斷了......無論如何,謝謝謝謝謝謝:-) – MrTristan 2013-04-19 14:36:25

+0

另外,有趣的是......當你使用或不使用通過該tokeninfo端點的斜線後,它運行的令牌實際上在關聯的作用域列表中顯示了帶和不帶斜槓的作用域。也許有兩個解決的m8/feed範圍? – MrTristan 2013-04-19 14:41:28

1
String accessToken = GoogleAuthUtil.getToken(getActivity(), plusClient.getAccountName(),  
"oauth2:" + Scopes.PLUS_LOGIN + " " + Scopes.PLUS_PROFILE + " " + MY_SCOPE); 

我的代碼有效。 「oauth2:」

+0

是的代碼也適用於我...我得到一個accesstoken ....它只是訪問令牌不與我們的項目相關聯。我可以打電話給「https://www.googleapis.com/oauth2/v1/userinfo?access_token=」,但使用該令牌的任何其他呼叫,正如我上面提到的,產生403 – MrTristan 2013-04-11 13:54:55

+0

哦..您應該添加另一個範圍.. – 2013-04-11 14:18:03

+0

我使用的是「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「作爲我的示波器 – MrTristan 2013-04-11 14:19:42