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 или нет).