ПредишенСледващото

OAuth2 удостоверяване при прилагането през Google Вход. Непрекъснато достъп до API Google 24

  • 04.03.17 10:28 •
  • marypodolyak •
  • • # 325518
  • • Habrahabr
  • • от пясъчника
  • 3 •
  • 4500

- като Forbes, само по-добре.

Този метод ще бъде обсъдено в класната стая, както и как да се жетоните, необходими за работа с приложния програмен интерфейс на Google.

Урокът ще представи частичен превод на официални документи. Но първо, малко история от моята практика и първите, които работят с OAuth2, може би някой ще бъде в подобна ситуация.

Отне ми да получи заявление чат с директен предаването YouTube. И тогава разбрах, че да изпраща заявки за превод (и само тогава чат), необходими за OAuth2 удостоверяване на потребителя. Започнах да търся. Информация по този въпрос е много малък, той е фрагментирана, не е подходящ за моя случай, и разбира се всичко е на английски език. По принцип, информацията е да се работи с най-популярните API: Drive, Cloud, Google Plus. В официалната документация на YouTube API има готов код, за да вземе така го ползват, но тя не е подходяща за Android. След като прекарва значителна част от времето, чрез опити и грешки, стигнах до работен разтвор. Първото нещо, което исках да направя, след като е за събиране на информация "накуп" и сортиране чрез който и spodviglo да пиша този урок.


Това е не друг, а искането за публикация, в отговор на което влезе в страницата, съдържаща authCode и кодът е бил в заглавната част на страницата. Всичко е по препоръка на API, както и действието да се скрие този код на лявата на потребителя на възложителя.

1. Получаване на пълномощията

Мениджърът на API, да създадете нов проект (или изберете съществуващ такъв):

Authentication OAuth2 приложение чрез система за вход в


Попълнете името на полето на заявлението и опаковката. След това изберете служебно свързване (Google Sign-In), тук трябва да въведете ключова заявление SHA1, да го прости: Android Studio Gradle намерите в раздела, отваря раздела Задачи-андроид-signingReport. Ние щракнете два пъти, а трупите ще покаже информация за ключовете. Ние считаме, SHA1 копие от ключово значение.

Authentication OAuth2 приложение чрез система за вход в


Щракнете върху бутона «Създаване на конфигурационен файл», а след това «Изтегли Google-services.json». Този файл се съхранява в JSON «приложение» папка проект.

Важно! Ако ще да публикува приложението в Google Play, за отстраняване на грешки ключ SHA1 ще трябва да се заменят с ключова освобождаване, съответно, и да замени конфигурационния файл.

Влезте в диспечера на API, ние виждаме, че генерирания ключ и клиент IDs OAuth. Ние трябва само информация, уеб клиент (идентификатор на клиент и клиент тайна).

Authentication OAuth2 приложение чрез система за вход в

В раздела "прозорец достъп искането за OAuth" можете да промените имейл адреса и името на продукта - това е, което ще бъде написана, когато той е поискал разрешение на "Допълнение **** искания ..."

2. Конфигурирайте Client за влизане в тях

, Да добавите към приложението на файла Gradle, за да получите достъп до API на Google Client в зависимост от:


И на приставката (в края на файла):


В Gradle проектен файл, в зависимост от:


Тук най-голям интерес е линията:

requestServerAuthCode (getString (R.string.server_client_id)) - попитайте за authCode, преминаване на параметър CID (всички пълно), които са получили по-горе.

requestScopes (нова Обхват ( "***")) - иска необходимата API се използва за достъп регион / област. Има някои, които вече са в определени области Тя Скоупс, но ако е необходимо, там не е открит, можете да зададете сами, както в моя случай. За да се покаже на достъпа на потребителите като "какво" иска да получи приложението.


Всичко това е в съответствие със стандарта на документация:

enableAutoManage (тази, това) - в параметрите предавани на слушателя и Activiti връзка (GoogleApiClient.OnConnectionFailedListener изпълнение интерфейс).

addApi (Auth.GOOGLE_SIGN_IN_API, GSO) - показват, че използвате Вход има API вече създадените възможности обект.


Тя изглежда така:

Бутонът Activiti се дефинира като всички останали мнение, това poveshat слушател и кликнете изпълни метод:


Параметрите са преминали конфигуриран mApiClient. RC_AUTH_CODE произволен брой, както винаги, за да следите резултати Activiti.

Authentication OAuth2 приложение чрез система за вход в


3. Получаване на код за упълномощаване


Резултатът е код за упълномощаване като обикновен низ, тя изглежда така:

acct.getEmail ()
acct.getDisplayName ()
acct.getPhotoUrl ()

Може да са необходими Тези данни, например, за да ги вмъкнете в заглавната NavigationView.

4. Изготвяне означение за достъп и Refresh Token


Нека разгледаме опциите. В Request.Builder () Прекарайте адреса на който получава жетони:


Заглавието уточни Content-Type:


Показва, че това е метод на POST да я подаде на тялото:


Сформирана requestBody трябва да съдържа следните параметри:

"Grant_type", "authorization_code" - показва, че трансферът ще бъде код за упълномощаване
"CLIENT_ID", getString (R.string.server_client_id) - параметър е клиент ID, в резултат на API мениджъра
"Client_secret", getString (R.string.client_secret) - клиент тайна, получена в мениджъра на API
"Код", authCode - всъщност кода.

Asynchronous поискване, в замяна получава редовно JSON с всички необходими данни за:

5. Актуализиране на означение за достъп

Искането е почти същата като тази в стъпка 4, с изключение на някои параметри:


Ето най-важните параметри:

"Grant_type", "refresh_token" - в стил посочи, че изпращането на опресняване знак
"Refresh_token", mRefreshToken - самият жетон

Отговорът ще бъде JSON, съдържащ ново означение за достъп, който може отново да се обърнете към API:

Така например, показват как изглежда искане до API, и както аз изпълнява означението за актуализация.
За да се направи запитване до API използвам Retrofit2 + RxAndroid. Тя изглежда като искане за чат на живо:


Важно е да се отбележи, че в заглавната част от ключов вид разрешение трябва да бъдат изпратени самия знак и достъп знак. Това е така, защото:


На следващо място, да отправи искане чрез RxAndroid, а от onError обаждане дойде всякакви грешки, има също така идва HttpException код за грешка 401 Unauthorized след работно време. Тук се лекува, проверете дали това е една и съща грешка, а след това доведе до съответния тип, проверете дали на код 401, или не и изпълнява метод за получаване на ново означение, а след това се повтаря искането.


Просто за да се провери маркера има искане за GET:


Отговорът ще дойде знак на данни, ако тя все още е активен, или на грешка, ако времето си живот изтече.

Отново, за изпълнението на актуализираната Google логика излиза на разработчика.

Преди да започнете да работите за проверка на искания от трета страна приложение / разширение, като Постман, за да се провери точността на входните параметри и получени отговорите. Аз ще бъда много щастлив, ако някой урок ще бъде от полза!

Връзки към документацията използва:

Свързани статии

Подкрепете проекта - споделете линка, благодаря!