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

В последнее время я много работаю с Google APIs на Android, особенно 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));

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

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

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

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

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

3 ответов


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

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

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

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

для получения дополнительной информации о различиях между AccountManager и GoogleAuthUtil см.:в двух словах в чем разница от использования запроса oauth2 getAuthToken и getToken

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

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

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

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

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

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

Я запутался, какой из них использовать, в каком случае и почему. Я использую метод no. 1 успешно ...

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

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

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

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

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

вы должны иметь возможность вызвать метод getToken() на


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

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

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

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

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

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

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


метод номер один (com.гуглить.прикладной программный интерфейс.клиент.googleapis.увеличение.андроид.СБМ.автор.* ) является частью более общего, кросс-платформенного потока управления учетными записями Google, в то время как метод номер два (com.гуглить.андроид.СБМ.автор.GoogleAuthUtil) является Android специфичным. Он выглядит как различные Android Google APIs, метод два, обернуть и упростить метод один. Например, документация Google+, второй абзац, заявляет " кнопка входа Google+ аутентифицирует пользователя и управляет OAuth 2.0 flow, который упрощает интеграцию с Google APIs."

Я бы конкретный метод Android,token = GoogleAuthUtil.getToken(mActivity, mEmail, mScope), везде, где это возможно.