Содержание статьи
Android Publisher
Прежде чем заносить в виртуальный блокнотик покупки, их нужно сначала еще раз проверить. Для организации межсерверного взаимодействия у Google есть специальный API под названием Android Publisher. Этот сервис позволяет получить всю информацию о выложенном в Google Play приложении: версии apk-файлов, описание и, самое главное, данные о совершенных покупках. Нельзя сказать, что все очень просто, но при должном упорстве все обязательно получится.
Сперва придется покликать мышкой — работа с Android Publisher слегка бюрократична. Необходимо создать учетную запись для своего сервера, привязать ее к опубликованному в Google Play приложению и, наконец, получить заветные учетные данные, позволяющие отправлять запросы.
Признаюсь, мне все это далось с трудом — очень много различных менюшек и формочек, в которых довольно легко запутаться. Если вдруг ты решишь свернуть с пути джедая и будешь искать советы на стороне, то предупреждаю тебя об опасностях: в Сети очень много устаревших и просто вредных советов. Проведем тебя по светлой стороне силы, читай внимательно и ничего не бойся.
Регистрация
Для начала нужно зайти в консоль разработчика и разрешить доступ по API к своему приложению, делается это в настройках. Доступ к данным получается через аккаунт приложений (service account), которого еще нет, — его нужно создать.
После нажатия на кнопку «Создать аккаунт приложения» откроется панель управления всеми существующими аккаунтами. В крупных проектах их обычно несколько, тут их можно разделить по правам доступа в зависимости от задач. Наш аккаунт будет только считывать финансовую информацию.
Теперь возвращаемся в консоль разработчика и жмем неожиданно большую кнопку «Открыть доступ», а в появившемся меню нужно еще раз выставить права для аккаунта.
Сервисный аккаунт будет отправлять запросы по протоколу OAuth, жми еще одну кнопку на странице с настройками. Тебе будет подготовлен JSON-файл с идентификаторами аккаунта, его нужно хранить бережно — повторно загрузить его не получится.
Ruby on Rails
Для веб-разработки мне приглянулся язык Ruby, а точнее фреймворк Ruby on Rails. Здесь буквально за несколько команд в консоли создается полноценный веб-сервер. Android-разработчикам он будет близок: в нем уже реализован MVC-паттерн, а синтаксис языка — это сплав функциональной и ООП-разработки. Совершенно не зная Ruby, реально начать разрабатывать на нем уже на следующий день, ссылку на короткий учебник я оставил во врезке.
На момент написания статьи версия библиотеки Android Publisher для Ruby находилась в статусе early-stage library — активный период разработки, когда многое еще будет доработано. Даже разработчикам на Go сейчас несколько проще — для этого языка есть демоприложения. Но это мелочи, для валидации покупок много не надо.
OAuth-токен
Есть новости: для организации межсерверного взаимодействия по протоколу OAuth полученного JSON-файла мало. Необходимо авторизоваться на сервере Google и получить уникальный сессионный ключ — токен доступа к API Google. Этот токен будет обязательным атрибутом любых дальнейших взаимодействий с API, его нужно указывать при каждом запросе на сервер. Запрос успешно выполнится, только если токен был выдан именно для этого сервиса и он еще актуален.
Сама механика общения в рамках OAuth нам не так важна, весь алгоритм авторизации уже реализован в библиотеке google-api-client. Кстати, в Rails библиотеки называются гемами (gem) и подключаются с помощью конфига Gemfile. Актуальная версия библиотеки — 0.11.
gem 'google-api-client', '~> 0.11'
Все запросы к серверу Google строятся на основе идентификационных данных, полученных при генерации аккаунта приложений. Библиотека google-api-client сама разберет полученный JSON-файл, нужно только указать к нему путь в переменной окружения GOOGLE_APPLICATION_CREDENTIALS. Для конфигурационных файлов в Rails существует папка config, куда я его скопировал под именем service_account.json.
ENV['GOOGLE_APPLICATION_CREDENTIALS'] =
"#{Rails.root}/config/service_account.json"
У создаваемого токена есть область действия (scope) — список API, к которым он сможет предоставить доступ. У Google огромное множество сервисов, для каждого есть свой scope-идентификатор. За работу со встроенными покупками (и приложением в Google Play вообще) отвечает Google Play Developer API v2, его scope называется androidpublisher. Для токена можно указать как один, так и несколько таких идентификаторов.
scopes = ['https://www.googleapis.com/auth/androidpublisher']
Когда загружен конфиг и указаны области действия, токен будет сгенерирован буквально в три строчки.
drive = Google::Apis::DriveV2::DriveService.new
auth_client = Google::Auth.get_application_default(scopes).dup
token_info=auth_client.fetch_access_token!
Переменная token_info будет содержать ответ в формате JSON. Это сам токен (строка из 129 символов), его тип (bearer) и срок действия (два часа).
{
"access_token"=>"ya29.ElpqBDf0jdeTgz55AkLr0o-TxUJsDKh4_V4I1kcWBgoLDt0VYyh0KI...",
"token_type"=>"Bearer",
"expires_in"=>3600
}
Таким образом, Гугл выдал нам доступ к части своего API, но только на два часа, по истечении этого срока токен придется запрашивать заново.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»