Доступ к 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)
-
Может ли кто-нибудь сказать мне, почему кто-нибудь будет использовать первый метод, а не второй?
-
Как я могу получить доступ к токену аутентификации в первом методе?
Ответы
Ответ 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),
, где это было возможно.