Лучший способ использовать API Google, используя OAuth 2.0 на Android - PullRequest
6 голосов
/ 06 августа 2011

Я пытаюсь перенести приложение Android, используя OAuth 1.0a, на OAuth 2.0. (используя клиентскую библиотеку Google API для Java / Android для моих нужд OAuth 2.0).

Какое наилучшее / предпочтительное решение для доступа к API Google с помощью OAuth 2.0 на платформе Android, которое также учитывает аспект удобства использования. Пользователь должен иметь возможность легко авторизовать доступ, легко интегрируясь с моим Android-приложением.

В настоящее время приложение использует веб-поток OAuth 1.0, где мое приложение открывает браузер, чтобы позволить пользователю авторизовать доступ, и с помощью пользовательского URI перенаправления мое приложение может получить токен доступа. Это работает довольно хорошо, но мне не понравился тот факт, что мне нужно выйти из приложения, чтобы открыть браузер для отображения веб-страницы. Я думал, что OAuth 2.0 мог бы обойти это и позволить улучшить взаимодействие с пользователем.

Я начал смотреть на интеграцию Adroid AccountManager-OAuth2, описанную в Google IO , так как она не включает веб-браузер и более тесно связана с Android, но она просто не работает должно. Это не задокументировано, и неясно, останется ли это жизнеспособным вариантом в будущем.

Я сейчас начал исследовать стандартный веб-поток OAuth 2.0.

Здесь, кажется, у меня есть 2 варианта:

Настройте клиент OAuth 2.0 в качестве установленного приложения и используйте URL-адрес urn: ietf: wg: oauth: 2.0: oob.

Не очень чистое решение, поскольку мои пользователи не будут копировать и вставлять код в мое приложение. Это совсем не удобно для пользователя.

В Использование OAuth 2.0 для доступа к документам API Google упоминается, что существует некоторый способ опроса заголовка страницы для анализа URL, но я также вижу много проблем с юзабилити, и на самом деле не хочется писать такой код. Если бы существовала клиентская библиотека, которая бы сделала это для меня, я был бы рад исследовать это дальше, но сейчас я отказался от этой опции.

Настройте клиент OAuth 2.0 в качестве веб-приложения и используйте URI перенаправления.

Здесь я заметил, что нестандартные схемы запрещены в OAuth 2.0. Раньше можно было использовать что-то вроде обратного вызова xoauth: //, но это больше не разрешено. При настройке URI перенаправления, например http://mysite.com/oauth2/callback,, я не могу заставить Android открывать мои действия, когда перенаправляет страницу Google OAuth 2.0, несмотря на то, что для нее настроен надлежащий фильтр намерений. http://mysite.com/oauth2/callback просто отображается в моем браузере.

работает следующее

Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse("http://mysite.com/oauth2/callback"));
startActivity(i);

Но когда страница Google OAuth 2 перенаправляется на тот же URL, он просто отображается в браузере.

Даже если это сработает, пользователю все равно будет показано всплывающее окно выбора (откройте в браузере или откройте с помощью моего Android Activity). С точки зрения удобства использования, это также не приемлемо.

Я ищу лучшее решение, чем приведенное здесь.

С уважением, Дэви

Ответы [ 2 ]

13 голосов
/ 07 августа 2011

В итоге я использовал компонент WebView для загрузки URL авторизации Google. Используя WebviewClient, я смог перехватить страницы, загружаемые в Webview, и, как таковой, когда пользователь принимает или отклоняет запрос на авторизацию, я смог продолжить поток.

Если пользователь принимает, URL-адрес, на который Google перенаправляет, содержит параметр запроса «code», и приложение может обменять его на токен OAuth 2.0. Если пользователь не принимает, URL-адрес, на который Google перенаправляет сообщение, содержит параметр запроса «ошибка», и приложение может обработать сценарий неудовлетворенности.

Я написал все в своем блоге: Поток Oauth 2.0 в Android

Пост также содержит пример приложения для Android, использующего поток OAuth 2.0 с API-интерфейсом Локатора. Пример кода доступен в GitGub .

2 голосов
/ 08 октября 2013

Сервисы Play были представлены на Google I / O 2013 и теперь являются официальным способом использования OAuth2 в Android . Им не требуется WebView.

...