Включите компоненты выставления счетов на вашем бэкэнд-сервере.

Вы только что внедрили Play Billing в своё Android-приложение или прогрессивное веб-приложение, и ваши пользователи могут покупать ваши цифровые товары. Теперь пришло время внедрить некоторые ключевые компоненты Play Billing на вашем бэкэнд-сервере.

API разработчика Google Play

API для разработчиков Google Play состоит из двух компонентов: API для управления подписками и внутриигровыми покупками и API для публикации . API для управления подписками и внутриигровыми покупками включает в себя следующие REST-ресурсы, помогающие управлять продуктами и покупками:

  • inappproducts : управление каталогом внутриигровых товаров и подписок
  • purchases.products : статус покупки товаров в приложении
  • purchases.subscriptions : статус покупки подписки и управление ею.

Вы можете использовать Google Play Developer API напрямую как REST API, или же клиентские библиотеки помогут вам быстро начать разработку. Клиентские библиотеки для всех поддерживаемых языков можно найти здесь . Следуйте руководству по началу работы с Google Play Developer API, чтобы связать свой проект API и настроить клиенты доступа к API.

Перечислите все товары, находящиеся в приложении.

При запросе информации о доступных продуктах на стороне клиента (в вашем Android-приложении или прогрессивном веб-приложении) необходимо указать список идентификаторов продуктов. Это можно реализовать на бэкэнде с помощью метода inappproducts.list из Play Developer API, который отобразит все внутриигровые продукты и подписки, созданные вами в Play Console. Обязательно проверяйте status каждого продукта и отправляйте клиенту приложения только active .

Перед предоставлением прав необходимо проверить покупки.

Ключевым моментом внедрения Play Billing в ваше Android-приложение или прогрессивное веб-приложение является проверка покупок перед предоставлением пользователю права доступа. Предоставляя пользователю право доступа, вы даете ему доступ к преимуществам или контенту, связанным с приобретенным им товаром. Поскольку это требует обработки конфиденциальных данных, ее следует обрабатывать на бэкэнд-сервере.

API для разработчиков Google Play предоставляет методы purchases.products:get и purchases.subscriptions:get . Используйте их с токенами покупок, полученными внутри приложения или хранящимися на вашем бэкэнд-сервере, для проверки легитимности покупки. Вам следует хранить токены покупок на вашем бэкэнд-сервере для проверки дополнительных покупок и прав пользователей. Для получения более подробной информации о необходимых шагах ознакомьтесь с документацией Google Play Billing по проверке покупок.

Встроенные покупки

После получения токена покупки от клиента, ваш бэкэнд должен вызвать API разработчика Google Play и проверить, не был ли он еще использован. Поле purchaseState действительной покупки имеет значение 1.

Если покупка действительна, клиент должен подтвердить покупку и предоставить право на получение товара после получения ответа от сервера.

Покупка подписки

Аналогично проверке покупок внутри приложений, ваш бэкэнд-сервер должен после получения токена покупки от клиента вызвать API разработчиков Google Play и проверить, действительна ли подписка.

Ваш клиент должен предоставить право доступа, если значение поля expiryTimeMillis в подписке превышает текущее время.

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

Поддерживайте актуальность состояния бэкэнда.

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

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

Обработка изменений состояния подписки

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

Subscription linkedPurchaseToken

Как указано в документации по подпискам , каждый новый процесс покупки в Google Play (первичная покупка, обновление или понижение подписки) генерирует новый токен покупки. Поле linkedPurchaseToken позволяет определить, когда несколько токенов покупки относятся к одной и той же подписке.

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

Например, когда бэкэнд получает токен покупки A для первоначальной покупки с пустым полем linkedPurchaseToken , он активирует право использования этого токена. Позже, когда бэкэнд получает новый токен покупки B после обновления, он проверяет поле linkedPurchaseToken , видит, что оно установлено на A, и отключает право использования токена покупки A.

Как обрабатывать связанные токены покупок при обновлении подписки.

Подробное обсуждение реализации linkedPurchaseToken см. в статье «Правильная реализация linkedPurchaseToken для предотвращения дублирования подписок» .

Уведомления для разработчиков в режиме реального времени

Метод purchases.subscriptions:get API разработчиков Google Play является источником достоверной информации для управления подписками пользователей. Если вы управляете состоянием своих подписчиков на защищенном бэкэнд-сервере, вам следует синхронизировать его состояние с серверами Google. Однако частое обращение к API разработчиков Google Play может привести к превышению лимитов API и задержкам в получении уведомлений о важных действиях пользователей (например, об отмене или обновлении подписки).

Функция уведомлений для разработчиков в реальном времени (RTDN) — это функция Google Play Billing, которая отправляет на ваш сервер мгновенное уведомление при изменении состояния прав подписчика (например, подписка приобретена, подписка отменена, подписка приостановлена). С помощью RTDN вы можете синхронизировать базу данных подписчиков, просто отвечая на эти уведомления, вместо того, чтобы регулярно опрашивать API разработчиков Google Play.

Ваш бэкэнд-сервер получит SubscriptionNotification о событиях, влияющих на состояние подписки, таких как продление и отмена. Затем вызовите API разработчиков Google Play, используя токен покупки из уведомления, чтобы получить полный статус и обновить состояние вашего бэкэнда.

Вы можете настроить RTDN для своего приложения, следуя этим инструкциям . Затем вам следует настроить свой сервер для приема этих сообщений.

Для получения более подробной информации обратитесь к полному справочнику RTDN .