Подтвердить что ты не робот

Доступ к API Google - GoogleAccountCredential.usingOAuth2 vs GoogleAuthUtil.getToken()

В последнее время я много работал с API Google на Android, особенно с Google Analytics, AdSense и Tasks API.

Я видел несколько примеров, предоставленных Google, где они используют этот оператор для получения объекта 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));

Однако, если я просмотрю документацию, например:
http://developer.android.com/google/auth/http-auth.html
http://developer.android.com/google/play-services/auth.html

Оба они упоминают ниже метод, который будет использоваться для получения токена:
token = GoogleAuthUtil.getToken(mActivity, mEmail, mScope);

Я смущен, какой из них следует использовать в каком сценарии и почему. Я использовал метод №. 1 успешно и без необходимости сохранения маркера в настройках (я думаю, это автоматически выполняется GoogleAccountCredential)

  • Может ли кто-нибудь сказать мне, почему кто-нибудь будет использовать первый метод, а не второй?

  • Как я могу получить доступ к токену аутентификации в первом методе?

4b9b3361

Ответ 1

Клиентская библиотека API Google API для Java, так как название предлагает библиотеку для доступа к API Google и доступно для нескольких платформ, таких как Java (в общем) и Android, а Google Play Services и GoogleAuthUtil доступен только на Android.

Изучая страницу вики-страницы, трудно понять, как клиентская библиотека Google API связана с GoogleAuthUtil, поскольку wiki предлагает, что AccountManager используется для обработки учетных записей Google, и на самом деле он вообще не упоминает об этом GoogleAuthUtil.

Однако, если вы вникнете в код и их трекер проблемы немного, вы можете увидеть, что пример задачи, который вы связали на самом деле использует GoogleAuthUtil с версия 1.12.0 клиентской библиотеки API Google API, когда поддержка GoogleAuthUtil была добавлена ​​.

Вики, вероятно, упомянут AccountManager вместо GoogleAuthUtil, поскольку это был способ сделать аутентификацию OAuth2 до того, как GoogleAuthUtil был доступен, и потому что эта часть вики еще не обновлена.

Подробнее о различиях между AccountManager и GoogleAuthUtil см. ниже: Вкратце, в чем отличие от использования запроса OAuth2 getAuthToken и getToken

Короче говоря, клиентская библиотека API Google - это кросс-платформенная библиотека для взаимодействия с сервисами Google, а версия Android реализована с помощью GoogleAuthUtil.

Может ли кто-нибудь сказать мне, почему кто-нибудь будет использовать первый метод, а не второй?

Причины использования клиентской библиотеки API Google API

  • Если вы разрабатываете для какой-либо другой платформы, чем Android, вы не можете использовать GoogleAuthUtil, поскольку это специальная библиотека для Android.
  • Если вы разрабатываете кросс-платформенное приложение, вы можете использовать клиентскую библиотеку API Google в своем общем коде для Android и других платформ.
  • Если вы много взаимодействуете со многими сервисами Google, эта библиотека может упростить вам работу.
  • Если вы уже используете это, и он работает так, как хотелось бы, нет никакого недостатка, чтобы продолжать использовать его, поскольку он является оберткой для GoogleAuthUtil, поэтому вы получаете все преимущества GoogleAuthUtil по сравнению с использованием AccountManager или какой-либо другой библиотеки в AccountManager.

Причины использования GoogleAuthUtil

  • Для этого не требуется никаких других библиотек или внешних зависимостей, чем службы Google Play.
  • Ваш размер приложения должен быть меньше, поскольку вам не нужно включать дополнительные библиотеки.
  • Если ваше взаимодействие с Google ограничено, может быть проще просто использовать GoogleAuthUtil напрямую, а не проходить через другую библиотеку.
  • GoogleAuthUtil не должен быть таким трудным в использовании, так как использование библиотеки, которая обтекает ее, чтобы упростить ее, возможно, было бы намного проще в использовании.

Я смущен, какой из них следует использовать в каком сценарии и почему. Я использовал метод №. 1 успешно...

Если вы используете клиентскую библиотеку API Google API, и она отлично работает для вас, я не вижу причин, по которым вы не должны продолжать ее использовать.

Однако, если я создам приложение для Android (только), которое должно взаимодействовать с сервисами Google, я бы, вероятно, использовал GoogleAuthUtil напрямую.

... без необходимости сохранения маркера в настройках (я думаю, это автоматически выполняется GoogleAccountCredential)

Да, это автоматически обрабатывается GoogleAuthUtil, который, в свою очередь, используется GoogleAccountCredential.

Как я могу получить доступ к токенам auth в первом методе?

Вы можете вызвать метод getToken() объекта GoogleAccountCredential.

Ответ 2

Google Play Services client library написано специально для устройств Android, чтобы обеспечить бесшовную интеграцию с отдельными службами Google и последовательный пользовательский интерфейс для получения авторизации от пользователей для доступа к этим службам с их учетными данными.

Google APIs Client Library for Java - это общая библиотека для доступа к службам Google из всех типов приложений (веб-приложений, установленных или приложений Android).

Возвращаясь к Android, если API Google, который вы хотите использовать, не включен в Google Play services library, вы можете подключиться с помощью соответствующего REST API, но вы должны получить токен OAuth 2.0.

Чтобы получить токен, вы можете либо -

  • напрямую использовать библиотеку OAuth 2.0 из клиентской библиотеки API Google API для Java (не рекомендуется для android)

  • или использовать часть авторизации в библиотеке сервисов Google Play с помощью GoogleAuthUtil и AccountPicker. Прочитать авторизацию с помощью Google для API REST. (GoogleAuthUtil.getToken() кэширует и управляет токеном и обновляет себя. Однако в случае сетевых ошибок/загрузки сервера вам может потребоваться используйте экспоненциальный алгоритм отсрочки перед повторной попыткой для токена, чтобы не наводнять сервер запросами.)

  • или используйте GoogleAccountCredential, упакованный в google-api-client-android-1.19.0.jar, который поставляется с клиентской библиотекой API Google API для Java. Пакет предлагает утилиты на основе клиентских библиотек сервисов Google Play и GoogleAccountCredential is just a wrapper вокруг GoogleAuthUtil и AccountPicker. Это позволит вам использовать один и тот же согласованный поток полномочий и стандартный диалог выбора учетных записей, который входит в клиентскую библиотеку служб Google Play, делегируя управление маркерами до GoogleAccountCredential. Для примера см. .

Ответ 3

Метод номер один (com.google.api.client.googleapis.extensions.android.gms.auth. *) является частью Google, более общим, кросс-платформенным управлением учетными записями, а метод номер два (com.google.android.gms.auth.GoogleAuthUtil) - это Android. Это похоже на различные Android API Google, метод два, оберните и упростите метод один. Например, документация Google+, второй абзац, гласит: "Кнопка входа в Google+ проверяет подлинность пользователя и управляет потоком OAuth 2.0, что упрощает интеграции с API Google".

Я бы использовал специальный метод Android token = GoogleAuthUtil.getToken(mActivity, mEmail, mScope),, где это было возможно.