web-dev-qa-db-fra.com

Accès à l'API Google - GoogleAccountCredential.usingOAuth2 vs GoogleAuthUtil.getToken ()

Dernièrement, j'ai beaucoup travaillé avec les API Google sur Android en particulier Analytics, AdSense et Tasks API.

J'ai vu quelques exemples fournis par Google où ils utilisent cette déclaration pour obtenir un objet GoogleAccountCredential

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

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

Cependant, si je passe par la documentation telle que:
http://developer.Android.com/google/auth/http-auth.html
http://developer.Android.com/google/play-services/auth.html

Les deux mentionnent la méthode ci-dessous à utiliser pour obtenir un jeton:
token = GoogleAuthUtil.getToken(mActivity, mEmail, mScope);

Je ne sais pas lequel utiliser dans quel scénario et pourquoi. J'utilise la méthode no. 1 avec succès et sans avoir besoin de conserver le jeton dans les préférences (je suppose que cela est fait par GoogleAccountCredential automatiquement)

  1. Quelqu'un peut-il me dire pourquoi quelqu'un utiliserait la première méthode plutôt que la seconde?

  2. Comment puis-je accéder au jeton d'authentification dans la première méthode?

38
Madhur Ahuja

Google APIs Client Library for Java est comme son nom l'indique une bibliothèque pour accéder aux API Google et elle est disponible pour plusieurs plateformes telles que Java (en général) et = Android tandis que Google Play Services et GoogleAuthUtil est uniquement disponible sur Android.

En regardant la page wiki du projet, il est difficile de comprendre comment la bibliothèque cliente des API Google est liée à GoogleAuthUtil car le wiki suggère que la AccountManager est utilisée pour gérer les comptes Google et il ne mentionne pas du tout GoogleAuthUtil.

Cependant, si vous creusez un peu dans le code et leur outil de suivi des problèmes, vous pouvez voir que le exemple de tâches que vous avez réellement lié tilise GoogleAuthUtil depuis version 1.12. = de la bibliothèque cliente des API Google lorsque la prise en charge de GoogleAuthUtil était ajoutée .

Le wiki mentionne probablement le AccountManager au lieu de GoogleAuthUtil car c'était la façon de faire l'authentification OAuth2 avant que GoogleAuthUtil ne soit disponible et parce que cette partie du wiki n'a pas encore été mise à jour.

Pour plus d'informations sur les différences entre le AccountManager et GoogleAuthUtil, veuillez consulter: En résumé, quelle est la différence par rapport à l'utilisation de la demande OAuth2 getAuthToken et getToken

En bref, la bibliothèque cliente des API Google est une bibliothèque multiplateforme pour interagir avec les services de Google et la Android est implémentée à l'aide de GoogleAuthUtil.

Quelqu'un peut-il me dire pourquoi quelqu'un utiliserait la première méthode plutôt que la seconde?

Raisons d'utiliser la bibliothèque cliente des API Google

  • Si vous développez pour une autre plate-forme que Android vous ne pouvez pas utiliser GoogleAuthUtil car il s'agit d'une bibliothèque spécifique Android Android).
  • Si vous développez une application multiplateforme, vous pouvez utiliser la bibliothèque cliente des API Google dans votre code partagé pour les deux Android et autres plates-formes).
  • Si vous interagissez beaucoup avec de nombreux services de Google, cette bibliothèque peut vous faciliter la tâche.
  • Si vous l'utilisez déjà et qu'il fonctionne comme vous le souhaitez, il n'y a pas vraiment d'inconvénient à continuer à l'utiliser, car il s'agit d'un wrapper pour GoogleAuthUtil, vous obtenez donc tous les avantages de GoogleAuthUtil par rapport à l'utilisation du AccountManager ou d'une autre bibliothèque basée sur le AccountManager. .

Raisons d'utiliser GoogleAuthUtil

  • Son utilisation ne nécessite aucune autre bibliothèque ou dépendance externe que les services Google Play
  • L'empreinte de votre application doit être plus petite car vous n'avez pas besoin d'inclure des bibliothèques supplémentaires.
  • Si votre interaction avec Google est limitée, il pourrait être plus facile d'utiliser simplement GoogleAuthUtil directement au lieu de passer par une autre bibliothèque.
  • GoogleAuthUtil ne devrait pas être aussi difficile à utiliser qu'il est, donc utiliser une bibliothèque qui s'enroule autour pour le simplifier pourrait ne pas être beaucoup plus facile à utiliser.

Je ne sais pas lequel utiliser dans quel scénario et pourquoi. J'utilise la méthode no. 1 avec succès ...

Si vous utilisez la bibliothèque cliente des API Google et que cela fonctionne bien pour vous, je ne vois aucune raison pour laquelle vous ne devriez pas continuer à l'utiliser.

Cependant, si je créais une application Android (uniquement) qui devait interagir avec les services de Google, j'utiliserais probablement GoogleAuthUtil directement.

... sans avoir besoin de conserver le jeton dans les préférences (je suppose que cela se fait automatiquement par GoogleAccountCredential)

Oui, cela est automatiquement géré par GoogleAuthUtil qui est à son tour utilisé par GoogleAccountCredential.

Comment puis-je accéder au jeton d'authentification dans la première méthode?

Vous devriez pouvoir appeler la méthode getToken () sur l'objet GoogleAccountCredential.

43
nibarius

Google Play Services client library Est écrit spécifiquement pour les appareils Android afin d'offrir une intégration transparente avec les services Google individuels et une interface utilisateur cohérente pour obtenir l'autorisation des utilisateurs d'accéder à ces services avec leurs informations d'identification.

Google APIs Client Library for Java Est une bibliothèque générique permettant d'accéder aux services Google à partir de tous les types d'applications (Web, installée ou Android application).

Pour en revenir à Android, si l'API Google que vous souhaitez utiliser n'est pas incluse dans Google Play services library, Vous pouvez vous connecter à l'aide de l'API REST appropriée, mais vous devez obtenir un OAuth 2.0 jeton.

Pour obtenir un jeton, vous pouvez soit -

  • utiliser directement la bibliothèque OAuth 2.0 de la bibliothèque cliente des API Google pour Java (non préférée pour Android)

  • ou tirez parti de la partie autorisation de la bibliothèque de services Google Play à l'aide de GoogleAuthUtil et AccountPicker. Lire Autorisation avec Google pour REST API. (GoogleAuthUtil.getToken() met en cache et gère l'expiration des jetons et se rafraîchit. Cependant, en cas d'erreurs réseau/de charge du serveur, vous vous devrez peut-être utiliser un algorithme de sauvegarde exponentielle avant de réessayer pour le jeton afin de ne pas inonder le serveur de demandes.)

  • ou utilisez le GoogleAccountCredential fourni dans google-api-client-Android-1.19.0.jar fourni avec Bibliothèque cliente des API Google pour Java . Le package propose des utilitaires basés sur les bibliothèques clientes des services Google Play et GoogleAccountCredential is just a wrapper autour de GoogleAuthUtil et AccountPicker. Cela vous permettrait d'utiliser le même flux d'autorisation cohérent et la boîte de dialogue de sélection de compte standard fournie avec la bibliothèque cliente des services Google Play tout en déléguant la gestion des jetons à GoogleAccountCredential. Reportez-vous à this pour un exemple.

9
nightlytrails

La méthode numéro un (com.google.api.client.googleapis.extensions.Android.gms.auth. *) Fait partie du flux de gestion de compte multiplateforme plus général de Google, tandis que la méthode numéro deux (com.google.Android.gms. auth.GoogleAuthUtil) est Android spécifique. Il ressemble aux différentes Android API Google, méthode deux, envelopper et simplifier la méthode un. Par exemple, la documentation Google+, deuxième paragraphe , indique "Le bouton de connexion Google+ authentifie l'utilisateur et gère le flux OAuth 2.0, ce qui simplifie votre intégration avec les API Google."

Je voudrais la méthode Android spécifique, token = GoogleAuthUtil.getToken(mActivity, mEmail, mScope), dans la mesure du possible.

2
GLee