setapplicationname google example android oauth-2.0 google-api google-api-java-client

android - example - Acceso a Google API-GoogleAccountCredential.usingOAuth2 frente a GoogleAuthUtil.getToken()



oauth2 java (3)

El método número uno (com.google.api.client.googleapis.extensions.android.gms.auth. *) Es parte del flujo de administración de cuentas multiplataforma general de Google, mientras que el método número dos (com.google.android.gms. auth.GoogleAuthUtil) es específico de Android. Parece que las diversas API de Android API, el método dos, envuelven y simplifican el método uno. Por ejemplo, el segundo párrafo de la documentación de Google+ dice: "El botón de inicio de sesión de Google+ autentica al usuario y administra el flujo de OAuth 2.0, lo que simplifica su integración con las API de Google".

Me gustaría token = GoogleAuthUtil.getToken(mActivity, mEmail, mScope), método específico de Android, token = GoogleAuthUtil.getToken(mActivity, mEmail, mScope), siempre que sea posible.

Últimamente, he estado trabajando mucho con las API de Google en Android especialmente Analytics, AdSense y API de tareas.

He visto algunas muestras proporcionadas por Google donde usan esta declaración para obtener un objeto GoogleAccountCredential

https://code.google.com/p/google-api-java-client/source/browse/tasks-android-sample/src/main/java/com/google/api/services/samples/tasks/android/TasksSample.java?repo=samples

credential = GoogleAccountCredential.usingOAuth2(this, Collections.singleton(TasksScopes.TASKS));

Sin embargo, si reviso la documentación como:
http://developer.android.com/google/auth/http-auth.html
http://developer.android.com/google/play-services/auth.html

Ambos mencionan el siguiente método que se utilizará para obtener un token:
token = GoogleAuthUtil.getToken(mActivity, mEmail, mScope);

Estoy confundido cuál usar en qué escenario y por qué. He estado usando el método no. 1 con éxito y sin la necesidad de conservar el token en las preferencias (supongo que GoogleAccountCredential lo hace automáticamente)

  1. ¿Alguien puede decirme por qué alguien usaría el primer método en lugar del segundo?

  2. ¿Cómo puedo acceder al token de autenticación en el primer método?


La API de Google API Client Library es como su nombre indica una biblioteca para acceder a las API de Google y está disponible para varias plataformas como Java (en general) y Android, mientras que Google Play Services y GoogleAuthUtil solo están disponibles en Android.

Al mirar la página wiki del proyecto, es difícil entender cómo Google APIs Client Library se relaciona con GoogleAuthUtil ya que el wiki sugiere que el AccountManager se usa para manejar las cuentas de Google y realmente no menciona GoogleAuthUtil en absoluto.

Sin embargo, si profundiza un poco en el código y en el rastreador de problemas, puede ver que las https://code.google.com/p/google-api-java-client/source/browse/tasks-android-sample/src/main/java/com/google/api/services/samples/tasks/android/TasksSample.java?repo=samples que enlazó realmente uses GoogleAuthUtil desde la versión 1.12.0 de la biblioteca de clientes de las API de Google cuando se added soporte para GoogleAuthUtil.

El wiki probablemente mencione el AccountManager en lugar de GoogleAuthUtil ya que esa era la forma de hacer la autenticación OAuth2 antes de que GoogleAuthUtil estuviera disponible y porque esa parte de la wiki no se ha actualizado aún.

Para obtener más información sobre las diferencias entre AccountManager y GoogleAuthUtil, consulte: En pocas palabras, ¿cuál es la diferencia de usar la solicitud de OAuth2 getAuthToken y getToken?

En resumen, Google APIs Client Library es una biblioteca multiplataforma para interactuar con los servicios de Google y la versión de Android se implementa mediante GoogleAuthUtil.

¿Alguien puede decirme por qué alguien usaría el primer método en lugar del segundo?

Razones para usar Google APIs Client Library

  • Si está desarrollando para otra plataforma que no sea Android, no puede usar GoogleAuthUtil ya que es una biblioteca específica de Android.
  • Si está desarrollando una aplicación multiplataforma, puede usar la Biblioteca del cliente de API de Google en su código compartido para Android y otras plataformas.
  • Si interactúas mucho con muchos de los servicios de Google, esta biblioteca puede facilitarte las cosas.
  • Si ya está usando esto y funciona como lo desea, no hay ningún inconveniente para continuar utilizándolo, ya que es un contenedor para GoogleAuthUtil para que pueda obtener todas las ventajas de GoogleAuthUtil en comparación con el uso del AccountManager o alguna otra biblioteca basada en el AccountManager. .

Razones para usar GoogleAuthUtil

  • Usar esto no requiere otras bibliotecas o dependencias externas que los servicios de Google Play
  • La huella de su aplicación debería ser menor, ya que no tiene que incluir bibliotecas adicionales.
  • Si su interacción con Google es limitada, podría ser más fácil simplemente usar GoogleAuthUtil directamente en lugar de ir a otra biblioteca.
  • GoogleAuthUtil no debería ser tan difícil de usar como lo es, por lo que usar una biblioteca que lo envuelva para simplificarlo podría no ser tan fácil de usar.

Estoy confundido cuál usar en qué escenario y por qué. He estado usando el método no. 1 exitoso ...

Si está utilizando la Biblioteca de clientes de las API de Google y funciona bien para usted, no veo ningún motivo por el que no deba seguir usándola.

Sin embargo, si creara una aplicación para Android (solo) que necesitara interactuar con los servicios de Google, probablemente usaría GoogleAuthUtil directamente.

... sin la necesidad de conservar el token en las preferencias (supongo que GoogleAccountCredential lo hace automáticamente)

Sí, esto es manejado automáticamente por GoogleAuthUtil, que a su vez es utilizado por GoogleAccountCredential.

¿Cómo puedo acceder al token de autenticación en el primer método?

Debería poder llamar al método getToken() en el objeto GoogleAccountCredential .


Google Play Services client library está escrita específicamente para dispositivos Android para ofrecer una integración perfecta con servicios individuales de Google y una interfaz de usuario coherente para obtener la autorización de los usuarios para acceder a estos servicios con sus credenciales.

Google APIs Client Library for Java es una biblioteca genérica para acceder a los servicios de Google desde todos los tipos de aplicaciones (web, instalada o aplicación de Android).

Volviendo a Android, si la API de Google que desea utilizar no está incluida en la Google Play services library , puede conectarse utilizando la API de REST adecuada, pero debe obtener un token de OAuth 2.0.

Para obtener un token, puedes:

  • utilice directamente la biblioteca OAuth 2.0 de Google APIs Client Library para Java (no preferida para Android)

  • o aproveche la porción de autorización de la biblioteca de servicios de Google Play con GoogleAuthUtil y AccountPicker. http://developer.android.com/google/auth/http-auth.html ( GoogleAuthUtil.getToken() almacena en caché y gestiona la caducidad del token y se actualiza por sí mismo. Sin embargo, en caso de errores de red / carga del servidor, es posible que necesite usar un algoritmo de retroceso exponencial antes de reintentar el token para no inundar el servidor con solicitudes .)

  • o utilice GoogleAccountCredential empaquetado en google-api-client-android-1.19.0.jar que viene con las API de Google Client Library para Java . El paquete ofrece utilidades basadas en bibliotecas de clientes de servicios de Google Play y GoogleAccountCredential is just a wrapper alrededor de GoogleAuthUtil y AccountPicker . Esto le permitiría usar el mismo flujo de autorización consistente y el diálogo selector de cuenta estándar que proviene de la biblioteca del cliente de servicios de Google Play, mientras delega la administración del token en GoogleAccountCredential . Referir this para un ejemplo.