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

dernièrement, j'ai beaucoup travaillé avec Google APIs sur Android en particulier les statistiques, AdSense et L'API de tâches.

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

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));

cependant, si je passe en revue la documentation telle que:

http://developer.android.com/google/auth/http-auth.html

http://developer.android.com/google/play-services/auth.html

tous deux mentionnent la méthode ci-dessous à utiliser pour obtenir un jeton:

token = GoogleAuthUtil.getToken(mActivity, mEmail, mScope);

I suis confus à utiliser dans le scénario et pourquoi. J'ai utilisé la méthode no. 1 avec succès et sans la nécessité de persister le token dans les préférences (je suppose que C'est fait par Googlecountcredential automatiquement)

  1. quelqu'un Peut me dire pourquoi serait-on d'utiliser la première méthode, par opposition à la seconde ?

  2. Comment puis-je accéder au token auth dans la première méthode ?

37
demandé sur nibarius 2014-03-03 13:13:04

3 réponses

le Google APIs Client Library for Java est comme le nom suggère une bibliothèque pour accéder à Google APIs et il est disponible pour plusieurs plates-formes telles que Java (en général) et Android tandis que le Google Play Services et GoogleAuthUtil est uniquement disponible sur Android.

en regardant la page wiki du projet, il est difficile de comprendre comment Google APIs La bibliothèque Client est liée à GoogleAuthUtil puisque le wiki suggère que le AccountManager est utilisé pour gérer les comptes Google et il ne mentionne pas vraiment GoogleAuthUtil du tout.

cependant, si vous creusez un peu dans le code et leur suivi des problèmes, vous pouvez voir que le exemple de tâches vous avez effectivement lié utilise Googleaututil depuis version 1.12.0 du Client Google APIs Bibliothèque lorsque le soutien pour GoogleAuthUtil était ajouté .

le wiki mentionne probablement le AccountManager au lieu de GoogleAuthUtil puisque 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 s'il vous plaît voir: en un mot différence par rapport à l'utilisation de la requête OAuth2 getathtoken et getToken

en bref Google APIs Client Library est une bibliothèque multi-plateforme pour interagir avec les services de Google et la version Android est mis en œuvre en utilisant GoogleAuthUtil.

quelqu'un Peut me dire pourquoi serait-on d'utiliser la première méthode, par opposition à la seconde ?

motifs d'utilisation Google Api De La Bibliothèque Du Client

  • 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.
  • si vous développez une application multi-plateforme, vous pouvez utiliser la bibliothèque Client APIs de Google dans votre code partagé pour Android et d'autres plateformes.
  • si vous interagissez beaucoup avec de nombreux services de Google cette bibliothèque peut faire les choses plus facile pour vous.
  • si vous utilisez déjà ceci et que cela fonctionne comme vous le souhaitez, il n'y a pas vraiment d'inconvénient à continuer à l'utiliser car C'est un wrapper pour GoogleAuthUtil.vous bénéficiez donc de tous les avantages de GoogleAuthUtil par rapport à L'utilisation du AccountManager ou d'une autre bibliothèque basée sur le AccountManager.

raisons de L'utilisation de GoogleAuthUtil

  • ne nécessite pas de autres bibliothèques ou dépendances externes que les services Google Play
  • L'empreinte de votre application devrait être plus petite puisque vous n'avez pas à inclure de bibliothèques supplémentaires.
  • si votre interaction avec Google est limitée, il pourrait être plus facile d'utiliser directement GoogleAuthUtil au lieu de passer par une autre bibliothèque.
  • GoogleAuthUtil ne devrait pas être si difficile à utiliser comme il est, donc en utilisant une bibliothèque qui enveloppe autour de lui pour simplifier il pourrait ne pas être beaucoup plus facile à utiliser.

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

si vous utilisez la bibliothèque client APIs de Google et que cela fonctionne bien pour vous, je ne vois pas pourquoi vous ne devriez pas continuer à l'utiliser.

cependant si je créais une application Android (seulement) qui avait besoin d'interagir avec Services de Google je voudrais probablement utiliser GoogleAuthUtil directement.

... sans le besoin de persister le token dans les préférences (je suppose que C'est fait automatiquement par GoogleAccountCredential)

Oui je c'est géré automatiquement par GoogleAuthUtil qui est à son tour utilisé par GoogleAccountCredential.

Comment puis-je accéder au token auth dans la première méthode ?

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

40
répondu nibarius 2017-05-23 12:10:40

Google Play Services client library est écrit spécifiquement pour les appareils Android pour 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 justificatifs d'identité.

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'application (web, installée ou application Android).

revenir à Android, si L'API Google que vous voulez utiliser n'est pas inclus dans le Google Play services library , vous pouvez vous connecter en utilisant L'API REST appropriée, mais vous devez obtenir un token OAuth 2.0.

pour obtenir un jeton, vous pouvez soit -

  • utilisez directement la bibliothèque OAuth 2.0 de la bibliothèque client APIs de Google pour Java (non préféré pour android) "

  • ou de tirer parti de la partie autorisation de la bibliothèque de services Google Play en utilisant GoogleAuthUtil et AccountPicker. Read authorising with Google for REST APIs. ( GoogleAuthUtil.getToken() cache et gère l'expiration du jeton et se rafraîchit. Cependant, en cas d'erreurs réseau/charge du serveur, vous pourriez avoir besoin d'utiliser un algorithme de back-off exponentiel avant de revenir pour le token afin de ne pas inonder le serveur de requêtes.)

  • ou utilisez le GoogleAccountCredential emballé dans google-api-client-android-1.19.0.jar qui vient avec Google APIs Bibliothèque Client pour Java . Le paquet offre des utilitaires basés sur Google Play Services client libraries 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 standard account picker que Google Play Services client library tout en déléguant la gestion des tokens à GoogleAccountCredential . Voir ce pour un exemple.

9
répondu nightlytrails 2014-09-20 01:23:23

méthode numéro un (com.Google.API.client.googleapis.extension.Android.gms.auth.* ) fait partie du flux de gestion de comptes multiplateformes plus général de Google, tandis que la méthode numéro deux (com.Google.Android.gms.auth.GoogleAuthUtil) est spécifique à Android. Il ressemble aux divers APIs Android Google, méthode deux, envelopper et simplifier la méthode un. Par exemple, la documentation Google+, deuxième paragraphe , déclare "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 spécifique Android, token = GoogleAuthUtil.getToken(mActivity, mEmail, mScope), chaque fois que possible.

2
répondu GLee 2014-03-11 18:51:28