Из прошлой статьи ты узнал, как перестать встраивать навязчивую (и копеечную) рекламу в свои приложения и начать получать деньги почти напрямую от благодарных пользователей. Но если люди будут не просто жертвовать деньги, а покупать контент, то задача чуть усложнится. Нужно защититься от мелкого мошенничества, внимательно следить за корректностью покупок, а еще позволить пользователю менять мобильные устройства без потери купленного контента. Все это решится, когда ты заведешь собственный backend-сервер. ][ тебе в этом поможет — сейчас мы напишем настоящий API на Ruby on Rails c сервисами Google.
 

Android Publisher

Прежде чем заносить в виртуальный блокнотик покупки, их нужно сначала еще раз проверить. Для организации межсерверного взаимодействия у Google есть специальный API под названием Android Publisher. Этот сервис позволяет получить всю информацию о выложенном в Google Play приложении: версии apk-файлов, описание и, самое главное, данные о совершенных покупках. Нельзя сказать, что все очень просто, но при должном упорстве все обязательно получится.

Сперва придется покликать мышкой — работа с Android Publisher слегка бюрократична. Необходимо создать учетную запись для своего сервера, привязать ее к опубликованному в Google Play приложению и, наконец, получить заветные учетные данные, позволяющие отправлять запросы.

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

 

Регистрация

Для начала нужно зайти в консоль разработчика и разрешить доступ по API к своему приложению, делается это в настройках. Доступ к данным получается через аккаунт приложений (service account), которого еще нет, — его нужно создать.

Включаем API в консоли разработчика
Включаем API в консоли разработчика

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

Создание аккаунта приложений
Создание аккаунта приложений

Теперь возвращаемся в консоль разработчика и жмем неожиданно большую кнопку «Открыть доступ», а в появившемся меню нужно еще раз выставить права для аккаунта.

Выставляем права для аккаунта
Выставляем права для аккаунта

Сервисный аккаунт будет отправлять запросы по протоколу 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. Оформи подписку на «Хакер», чтобы читать все статьи на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи одну статью

Заинтересовала статья, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для статей, опубликованных более двух месяцев назад.


1 комментарий

Подпишитесь на ][, чтобы участвовать в обсуждении

Обсуждение этой статьи доступно только нашим подписчикам. Вы можете войти в свой аккаунт или зарегистрироваться и оплатить подписку, чтобы свободно участвовать в обсуждении.

Check Also

В Google Play снова нашли малварь, объединявшую устройства в рекламный ботнет

Специалисты Symantec обнаружили в приложениях из Google Play вредоноса Sockbot, который об…