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

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

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

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

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


person Bostone    schedule 28.03.2012    source источник
comment
Что вы имеете в виду под утверждением вашего приложения? Вы стремитесь использовать их личность в своем приложении (OpenID) или хотите, чтобы ваше приложение получало доступ к данным вашего пользователя с помощью Google (OAuth)?   -  person Anirudh    schedule 06.04.2012
comment
Справедливый вопрос. В этом конкретном случае я хочу иметь возможность входить в учетную запись Google Reader, используя зарегистрированную учетную запись Google на телефоне. В качестве альтернативы (если это невозможно) я бы не возражал (но предпочел бы не перенаправлять пользователя) изначально на страницу утверждения приложения Google OAuth.   -  person Bostone    schedule 07.04.2012
comment
Фактическое получение информации из учетной записи Google Reader выполняется удаленным сервером, приложению необходимо только передать соответствующий токен аутентификации.   -  person Bostone    schedule 07.04.2012


Ответы (2)


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

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

person Nikolay Elenkov    schedule 10.04.2012
comment
Как я уже сказал, я бы предпочел подписывать пользователя с его существующей учетной записью Google. Есть ли какая-либо документация по этим коротким строкам, в которой описывается, что поддерживается? - person Bostone; 10.04.2012
comment
Правильный термин - на самом деле «название услуги». Это не полный список, но вот большинство из них: code.google.com/ apis / gdata / faq.html # clientlogin. Для получения общей информации об аутентификации в службах Google вы можете начать здесь: developers.google.com/accounts. AccountManger в Android - это всего лишь интерфейс для них. - person Nikolay Elenkov; 11.04.2012
comment
Спасибо, Николай. Я принимаю ваш ответ, так как почти уверен, что смогу выяснить остальное на данный момент - person Bostone; 11.04.2012
comment
Я думаю, что проблема, с которой я столкнулся с этим подходом, заключается в том, что у Reader до сих пор нет официального API. Поэтому я не могу указать свой ключ API с помощью Google Concole и могу получить доступ только для чтения. Итак, я задаю еще один вопрос по этому поводу - person Bostone; 18.04.2012
comment
Вот это, но не официальное: code.google.com/p/google- reader-api Это также может быть полезно, в нем есть код, специфичный для Android, но, AFAIK, нет поддержки Reader: code.google.com/p/google-api-java-client - person Nikolay Elenkov; 18.04.2012

Вот учебный класс Android по AccountManager, который может помочь:

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

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

person robertly    schedule 09.04.2012