2013-04-11 7 views
5

così ho implementato il login di google plus nella mia app ... la mia implementazione segue molto fedelmente l'esempio dato here. La più grande differenza tra la mia e la sua è che ho una serie più ampia di ambiti che ho bisogno. quando si costruisce il mio plusclient a specificare i seguenti scopi:Implementazione di Android PlusClient e ottenere un token

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

seguito su tutta la linea nel mio metodo onConnected tento di ottenere un access token dalla mia sessione per passare al nostro server dove facciamo la vera carne & patate lavoro .

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

questo produce un token di accesso. Yippee! destra? no. quando proviamo a utilizzare questo token sembra che non sia associato alla nostra app. quando si esegue il token attraverso googles tokeninfo endpoint, otteniamo qualcosa sulla falsariga di

{ 
"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" 
} 

che issued_to valore non corrisponde a nessuna delle nostre clienti id. secondo l'ultima parte di this blog post google non è in grado di abbinare questa richiesta di token con il nostro progetto. tuttavia, nella nostra console API ho effettivamente l'impronta digitale SHA lì per Android ed è effettivamente separato con il nome del pacchetto da un punto e virgola. nessun errore di ortografia. ho aspettato ore per vedere se si trattava di un problema di propagazione. Ho anche aggiunto l'impronta digitale SHA e quant'altro per creare un clientid per il nostro keystore di debug. abbiamo lo stesso problema se esportiamo un apk firmato da Eclipse o se lo eseguiamo direttamente.

questo mi sta facendo impazzire. non so dove rivolgermi a questo.

come esempio, quando si effettua una chiamata a

googleapis.com/plus/v1/people/me/people/visible?access_token=TOKEN_HERE & maxResults = 100 & pageToken = & alt = json & orderBy = migliore

ottengo

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

perché Google per qualsiasi motivo non associare quella pedina con il mio progetto.

+0

Questo mi sta facendo impazzire. Non riesco a risolverlo. – frostymarvelous

risposta

2

fino ad ora, questo è un bug nella google api.

se estrai l'ambito "https://www.google.com/m8/feeds", quindi tutto funziona e il token è associato correttamente al nostro progetto. se "https://www.google.com/m8/feeds" è incluso come ambito richiesto, tutto si interrompe dal lato API nonostante il fatto che richieda all'utente l'autorizzazione appropriata. anche se otteniamo ancora un token quando si richiede questo ambito, il token non è associato al nostro progetto.

+2

Solo per tutti gli altri, è necessario un trailing barrare su tale URL: "https://www.google.com/m8/feeds/ - non riuscirà a far corrispondere l'ambito senza di esso e dare un errore. –

+0

apprezzo molto il tuo aiuto. Wow. tutto quello che posso dire è wow. una barra mancante. haha. mantengo la mia opinione che si tratti di un bug nell'api comunque. quando si richiede questo ambito senza la barra finale esso risolve e informa l'utente in quella pagina delle autorizzazioni che stiamo richiedendo questa autorizzazione, ma le cose si rompono nel collegamento del token alla nostra app ... in ogni caso, grazie grazie grazie :-) – MrTristan

+0

anche, abbastanza interessante ... quando si esegue il token che si ottiene dopo aver utilizzato o non utilizzare la barra attraverso quell'endpoint tokeninfo in realtà mostra l'ambito con e senza la barra nell'elenco degli ambiti associati. forse ci sono due ambiti m8/feed che si stanno risolvendo? – MrTristan

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

Il mio codice funziona. Forse hai l'etichetta non necessaria dopo "oauth2:"

+0

sì il codice funziona anche per me ... ottengo un token di accesso .... è solo che il token di accesso non è associato al nostro progetto. posso effettuare una chiamata a "https://www.googleapis.com/oauth2/v1/userinfo?access_token=" ma qualsiasi altra chiamata con quel token, come ho menzionato sopra, produce un 403 – MrTristan

+0

Ohh .. Dovresti aggiungere un altro ambiti ... –

+0

sto usando "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 "come i miei ambiti – MrTristan

Problemi correlati