2011-08-06 9 views
6

Estoy tratando de migrar una aplicación de Android usando OAuth 1.0a a OAuth 2.0. (utilizando la biblioteca de cliente API de Google para Java/Android para mis necesidades de OAuth 2.0).La mejor forma de usar Google API usando OAuth 2.0 en Android

¿Cuál es la mejor solución/preferido para acceder a las API de Google a través de OAuth 2.0 en una plataforma de Android que tiene en cuenta el aspecto de usabilidad también. El usuario debería poder autorizar el acceso de una manera fácil, integrándose a la perfección con mi aplicación de Android.

La aplicación está utilizando actualmente el flujo basado en web OAuth 1.0, donde mi aplicación muestra un navegador para permitir que el usuario autorice el acceso y, mediante un URI de redirección personalizado, mi aplicación puede recuperar un token de acceso. Funciona bastante bien, pero no me gustó el hecho de que tengo que dejar mi aplicación para abrir un navegador para mostrar una página web. Estaba pensando que OAuth 2.0 podría solucionar esto y permitir una mejor experiencia de usuario.

Empecé a mirar el Adroid AccountManager-OAuth2 integration as outlined at Google IO, ya que no involucra un navegador web, y está más estrechamente acoplado con Android, pero simplemente no está funcionando como debería. No está documentado, y no está claro si seguirá siendo una opción viable para el futuro.

Ahora he empezado a investigar el flujo web estándar de OAuth 2.0.

Aquí parecen tener 2 opciones:

configurar el cliente de OAuth 2.0 como una aplicación instalada, y el uso de la urna: IETF: WG: oauth: 2.0: OOB URI de redireccionamiento.

No es una solución muy limpia, ya que no voy a tener mis usuarios copiar y pegar un código en mi aplicación. Esto no es fácil de usar en absoluto.

El Using OAuth 2.0 to Access Google APIs docs menciona que hay alguna manera de sondear el título de la página para analizar la URL, pero también veo un montón de problemas de usabilidad con eso, y realmente no tengo ganas de escribir este tipo de código de plomería . Si existe una biblioteca cliente que pueda hacer eso por mí, me gustaría investigar esto más a fondo, pero por ahora, he descartado esta opción.

configurar el cliente OAuth 2.0 como una aplicación de web, y utilizar un redireccionamiento URI.

Aquí me di cuenta de esquemas no estándar están prohibidos en OAuth 2.0. Antes, era posible utilizar algo como xoauth: // callback, pero eso ya no está permitido. Al configurar un URI de redireccionamiento como http://mysite.com/oauth2/callback, no puedo permitir que Android abra mi actividad cuando la página de Google OAuth 2.0 redirige, a pesar de haber configurado un filtro de intención adecuado para ella. El http://mysite.com/oauth2/callback se muestra simplemente en mi navegador.

A continuación se hace trabajar

Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse("http://mysite.com/oauth2/callback")); 
startActivity(i); 

Pero cuando la página Google OAuth 2 redirige a la misma URL, simplemente se muestra en el navegador.

Incluso si esto iba a funcionar, el usuario todavía se presentaría con una ventana emergente selector (abierta en el navegador o abrir usando mi Actividad Android). Desde una perspectiva de usabilidad, esto tampoco es aceptable.

Estoy buscando una solución mejor que las que se describen aquí.

Saludos, Davy

Respuesta

13

Terminé usando un componente WebView para cargar la autorización de URL de Google. Al usar WebviewClient, pude interceptar las páginas que se estaban cargando en Webview, y como tal, cuando el usuario acepta o rechaza la solicitud de autorización, pude continuar el flujo.

Si el usuario acepta, la URL a la que Google redirige contiene un parámetro de solicitud de "código", y la aplicación puede cambiarlo por un token de OAuth 2.0. Si el usuario no acepta, la URL a la que Google redirige contiene un parámetro de solicitud de "error", y la aplicación puede manejar el escenario no satisfecho.

Yo he escrito todo en una entrada de blog: Oauth 2.0 flow in Android

El mensaje también contiene una aplicación para Android muestra utilizando el flujo de OAuth 2.0 con la API de Latitude. Sample code is available in GitGub.

+0

Acabo de probar [AccountManager] (http://developer.android.com/reference/android/accounts/AccountManager.html) con [muestra de Picasa] (http: //samples.google-api-java- client.googlecode.com/hg/picasa-android-sample/instructions.html?r=default). El video que mencionaste (Google I/O 2011) parece ser un buen punto de partida. Y el ejemplo de Picasa es bueno para mí. En este momento todavía no he trabajado con OAuth 2/AccountManager. Pero al ver la fuente de Picasa, creo que no es tan ofuscante. ¿Lo has probado? –

+0

Debería funcionar, pero en los pre-ICS la pantalla de autorización no es realmente fácil de usar. Enumera los alcances sin procesar de Oauth2. En ICS tiene nombres legibles por humanos. Pero no obtiene la marca (icono de la aplicación) que obtiene con el enfoque basado en la web. https://plus.google.com/u/0/112215288642007559493/posts/Zme5LNLwCDP – ddewaele

+0

Si tu aplicación está disponible en el mercado, ¿podrías indicarme el enlace? Lo siento si esta es una pregunta privada, puedes decir que no, lo entenderé ... –

Cuestiones relacionadas