2012-01-24 7 views
8

Sto sviluppando un'applicazione Android e ho bisogno di ottenere le informazioni "me" da google, ma finisco sempre in entrambe le risposte codice 401 o 403. Cosa sto facendo male? Ecco il mio codice:Come chiamare https://www.googleapis.com/plus/v1/people/me su google

private static final String GOOGLE_AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/plus.me"; 

ottengo il token OAuth da (nota ... codice qui sotto è accorciata):

Account googleAccount = (AccountManager) getSystemService(ACCOUNT_SERVICE).getAccountsByType("com.google")[0]; 
final Bundle bundle = manager.getAuthToken(googleAccount, GOOGLE_AUTH_TOKEN_TYPE, true, null, null).getResult(); 
String authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN); 

Fin qui tutto bene ... ora ho una pedina così tutto sembra a posto qui

ora ottenere informazioni di me:

String GOOGLE_ME_URL = "https://www.googleapis.com/plus/v1/people/me"; 
final DefaultHttpClient client = new DefaultHttpClient(); 
final HttpGet request = new HttpGet(GOOGLE_ME_URL); 
request.addHeader("Authorization", "OAuth=" + authToken); 
final HttpResponse response = client.execute(request); 

Questo dà codice di risposta 401.

Ho anche provato:

final DefaultHttpClient client = new DefaultHttpClient(); 
final HttpGet request = new HttpGet(GOOGLE_ME_URL + "?access_token=" + authToken); 
final HttpResponse response = client.execute(request); 

Questo dà codice di risposta 403 - Qualcosa come "Limite giornaliero superato. Registrati per favore ".

Cosa sto sbagliando? cosa ho perso? Come dovrebbe essere fatto?

Grazie

// modifiche sotto Alcuni ulteriori indagini: ho aggiunto un progetto in code.google.com/apis/console e ha preso la chiave generata da lì e messo in l'url, come: https://www.googleapis.com/plus/v1/people/me?key=my_generated_key&access_token= "+ authToken. Ora la chiamata funziona bene e ottengo una risposta 200 con le informazioni corrette, ma non voglio usare questo metodo se non devo e secondo google non dovrei aver bisogno di" • Se la richiesta richiede un'autorizzazione (come una richiesta per i dati privati ​​di una persona), deve includere un token OAuth 2.0. Essa può anche includere la chiave API, ma non è necessario." - da developers.google.com/+/api/oauth

Un'altra cosa:. Se provo un altro URL come 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=' + authToken funziona benissimo

risposta

0

si utilizza http in questo momento, ma in realtà si sta chiamando un sito tramite HTTPS utilizzare una procedura di connessione sicura o utilizzare il http:... // indirizzo

(Sorry , non è stato ancora possibile fare un commento)

+0

Ciao e grazie per il vostro aiuto. Vuoi dire che non posso usare DefaultHttpClient e HttpGet? Puoi pubblicare come dovrei farlo invece? – user1140596

+0

Altre chiamate https come h t t p s: // w w w.googleapis.com/oauth2/v1/tokeninfo?access_token=my_authToken funziona correttamente con lo stesso codice. Vedi la mia modifica nel post principale – user1140596

+0

Sì, mi dispiace potresti avere ragione. Mi sono imbattuto in un problema di certificato qualche tempo fa ed è stata una vera seccatura. Ho dovuto fare alcune cose per farlo funzionare, ma ora vedo che il tuo problema è un altro. Per i record, ecco una sorta di cosa dovevo fare: http://stackoverflow.com/questions/2012497/accepting-a-certificate-for-https-on-android – Scalarr

0

Generare un nuovo token di autenticazione e d segreto per la tua applicazione e riprova.

che potrebbe risolvere il problema, ma il limite di tentativi al giorno potrebbe essere esaurito ...

Ho avuto lo stesso problema riscontrato.

+0

Ho provato la funzione invalidateAuthToken e poi ho ricevuto un nuovo token auth ma non ha aiutato. Ho ancora gli stessi risultati. – user1140596

+0

BTW, non ho generato alcun "segreto". Cos'è questo? – user1140596

+0

segreto e token emessi quando si registra un'applicazione. – sandeep

1

Perché alcuni di voi non provano ad accedere alla Google Console. In questo modo sarai in grado di accedere agli strumenti necessari per correggere almeno 403 forbidden problems. DMC

3

La maggior parte delle nuove API di Google hanno quote (come i limiti di utilizzo giornalieri) e alcune hanno anche il supporto per la fatturazione (dove si riceve la fatturazione per chiamata API). Queste quote e fatturazione sono calcolate per progetto dello sviluppatore e non per utente finale, quindi Google deve sapere quale app per assegnare l'utilizzo dell'API.

I client API che utilizzano OAuth 2.0 di Google sono in genere necessari per la registrazione e ottenere un ID client e un segreto client.

Questo ID cliente e il segreto del client vengono restituiti dalla console dell'API di Google: code.google.com/apis/console.

Quindi si utilizzano questi valori nell'applicazione e questo identifica l'app e consente a Google di assegnare l'utilizzo dell'API all'account/progetto dello sviluppatore.

Nell'interfaccia AccountManger che stai utilizzando, non è stato passato alcun ID cliente dall'app, quindi Google non è in grado di identificare quale account sviluppatore/quota del progetto dedurre per l'utilizzo. Inoltre, non sa che l'API è stata abilitata correttamente (TOS accettato, ecc.) Da te come sviluppatore. Ecco perché ti chiede di "iscriverti" e di "limite giornaliero superato" (poiché il limite non registrato è zero richieste per molte API).

In questo scenario, è necessario passare il valore "chiave" come si è fatto per accedere alle API con token OAuth 2.0 recuperati dall'accountManager.

13

Il problema riguarda la chiave api semplice passata nella richiesta.

Se il parametro chiave non è incluso nella richiesta o se l'API Google+ non è stata attivata per quel progetto, verrà visualizzato l'errore: "Limite giornaliero superato. Registrati".

Per risolvere questo problema, è necessario eseguire le seguenti operazioni:

  • Visita Google API Console qui: https://code.google.com/apis/console/?api=plus
  • Sotto il pannello Servizi, assicurarsi che l'API Google+ è acceso "on".
  • Nella console API, fare clic su Accesso API nel menu a sinistra.
  • Copia la chiave API presentata verso il basso.
  • Includere questa chiave API nella richiesta HTTP.
GOOGLE_ME_URL + "?access_token=" + authToken + "&key=" + MY_SIMPLE_API_KEY 
+0

Questo ha aiutato! Passi: n. 1. crea un progetto sulla console degli sviluppatori, aggiungi l'API di google plus. # 2. avvia Oauth con GET https://accounts.google.com/o/oauth2/v2/auth?client_id aggiungi almeno https://www.googleapis.com/plus.login e https://www.googleapis.com/ plus.me al campo di applicazione. # 3. Ottieni token per il codice (POST https://www.googleapis.com/oauth2/v4/token) # 4.Verifica le autorizzazioni concesse (OTTIENI https://www.googleapis.com/oauth2/v1/tokeninfo?key=YOUR_KEY&access_token=YOUR_TOKEN): assicurati che plus.me abbia ottenuto il n. 5. OTTIENI https://www.googleapis.com/people/me?key=YOUR_KEY&access_token=YOUR_TOKEN – nagylzs

+0

Grazie. Non so perché questo è stato così difficile da trovare. Così tanti documenti sull'utilizzo di API da altre interfacce. Avevo solo bisogno del semplice modulo REST. –

0

Ho lo stesso problema è sufficiente abilitare google + api nella console Enjoy :)