2012-03-28 12 views
10

Dopo aver letto tutti i tipi di messaggi Stackoverflow e vari documenti, inclusi alcuni sul sito http://code.google.com/p/google-api-java-client/, mi sento completamente confuso. Quindi qualcuno può spiegarmi il modo migliore per ottenere quanto segue:Android: SSO di Google - OAuth o AccountManager? O entrambi?

  1. Consentire all'utente di approvare la mia app. Non mi interessa se ciò avviene accedendo al proprio account Google registrato in account/impostazioni e approvando l'app (modalità preferita) o chiamando la pagina di autenticazione di Google OAuth
  2. Ottieni il token di autenticazione che può essere utilizzato per comunicare con Google Reader

Un altro punto di confusione per me - Sono stato in grado di approvare la mia app utilizzando AccountManager e ottenere il token di autenticazione da esso ma non funzionerà con Google Reader. Quindi, come bilanciare le informazioni sull'account da AccountManager e OAuth? Devo ancora fare qualcosa con OAuth dopo essere stato approvato dall'utente nelle impostazioni di AccountManager?

Codice esempio sarebbe bello, ma mi aspetto più di una spiegazione chiara di come tutti questi pezzi sono legati gli uni agli altri

+0

Cosa intendi per "approvare" la tua app? Cerchi di utilizzare la loro identità nella tua app (OpenID) o la tua app accede ai dati dell'utente con Google (OAuth)? – Anirudh

+0

Domanda giusta. In questo caso particolare, voglio essere in grado di firmare l'utente nel proprio account Google reader utilizzando l'account Google registrato del proprio telefono. In alternativa (se ciò non è possibile) non mi dispiacerebbe (ma preferirei non) reindirizzare l'utente inizialmente alla pagina di approvazione dell'app Google OAuth. – Bostone

+0

L'effettivo recupero delle informazioni dall'account Google Reader viene eseguito dal server remoto, l'app deve solo passare il token di autenticazione appropriato – Bostone

risposta

6

Il gestore account consente di ottenere token di autenticazione per servizi diversi. Ci sono diverse implementazioni concrete sotto il cofano: ClientLogin, OAuth, ecc. Per farlo funzionare, per esempio, con Google Reader, devi passare il tipo di token appropriato. Per ClientLogin, quelli sono una stringa breve come "ah" (App Engine) e "reader" (Google Reader). Per OAuth, sono ambiti, come definito da ciascun servizio. Quindi, che cosa stai passando come parametro authTokenType?

L'acquisizione del token è asincrona, poiché potrebbe comportare l'accesso alla rete. Se è presente un token memorizzato nella cache, verrà restituito immediatamente, se valido. Il flusso non è così complicato, vedi il link sopra per la bella immagine. Una volta ottenuto il token, lo inserisci nell'intestazione appropriata e utilizza l'API secondo le specifiche.

+0

Come ho detto, preferirei firmare l'utente con il proprio account Google esistente. C'è qualche documentazione su queste "stringhe brevi" che delinea ciò che è supportato? – Bostone

+0

Il termine corretto è in realtà 'nome servizio'. Questo non è un elenco completo, ma eccone di più: http://code.google.com/apis/gdata/faq.html#clientlogin. Per informazioni generali sull'autenticazione dei servizi Google, puoi iniziare qui: https://developers.google.com/accounts/. AccountManger di Android è solo un frontend per quelli. –

+0

Grazie Nikolay.Accetto la tua risposta poiché sono abbastanza sicuro di poter capire il resto a questo punto – Bostone

4

Ecco una classe di Android formazione su AccountManager che potrebbe aiutare:

http://developer.android.com/training/id-auth/authenticate.html

Inoltre, l'utilizzo di AccountManager con Google Reader è attualmente l'unico modo preferito per farlo. Indirizzare gli utenti a una pagina di accesso con una WebView non è molto sicuro e l'utilizzo di un browser non è supportato dalle API di Google per quanto ne so (non sono nemmeno sicuro se Reader utilizzi OAuth2 o meno).

+0

Link utile, grazie – Bostone

Problemi correlati