Android: Google SSO - OAuth или AccountManager? Или оба?

Прочитав всевозможные публикации Stackoverflow и различные документы, в том числе некоторые на http://code.google.com/p/google-api-java-client/, я чувствую себя совершенно смущенным. Так может кто-нибудь объяснить мне лучший способ добиться следующего:

  • Позвольте пользователю одобрить мое приложение. Меня не волнует, если это делается путем доступа к зарегистрированной учетной записи Google в учетных записях/настройках и одобрения приложения (предпочтительный способ) или путем вызова страницы проверки подлинности OAuth Google.
  • Получить токен аутентификации, который можно использовать для связи с Google Reader

Еще одна путаница для меня - я смог одобрить свое приложение с помощью AccountManager и получить от него токен аутентификации, но он не будет работать с Google Reader. Итак, как сбалансировать учетную информацию от AccountManager и OAuth? Должен ли я все-таки делать что-либо с OAuth после того, как я получу одобрение пользователя в настройках AccountManager?

Пример кода был бы приятным, но я больше смотрю на некоторое ясное объяснение того, как все эти части связаны друг с другом.

Ответ 1

Менеджер учетных записей позволяет получить токены аутентификации для разных служб. Существуют различные конкретные реализации под капотом: ClientLogin, OAuth и т.д. Чтобы заставить его работать, скажем, с Google Reader, вам необходимо передать соответствующий тип токена. Для ClientLogin это короткие строки, такие как "ах" (App Engine) и "reader" (Google Reader). Для OAuth они являются областями, определенными каждой службой. Итак, что вы передаете как параметр authTokenType?

Получение маркера асинхронно, так как это может быть связано с доступом к сети. Если есть кешированный токен, он будет возвращен сразу, если он действителен. Поток не такой уж сложный, см. Ссылку выше для красивой картинки. Как только вы получите токен, вы поместите его в соответствующий заголовок и используете API в соответствии со спецификацией.

Ответ 2

Здесь класс обучения Android в AccountManager, который может помочь:

http://developer.android.com/training/id-auth/authenticate.html

Кроме того, использование AccountManager с Google Reader в настоящее время является единственным предпочтительным способом этого. Направляя пользователей на страницу входа в систему с помощью WebView, не очень безопасно, и, насколько мне известно, API-интерфейсы Google не поддерживаются браузером (я также не уверен, что Reader использует OAuth2 или нет).