Жизненный цикл единоразовой покупки

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

Рисунок 1. Состояния жизненного цикла и события перехода для разовых покупок.

Новые единовременные покупки продукта

После того, как пользователь завершит процесс оплаты, ваше приложение может увидеть информацию о новой покупке одним из следующих способов:

  • Настройте Real-time developer notifications и включите функцию Get all notifications for subscriptions and one-time products чтобы получать обновления о статусе покупок.
  • Реализуйте интерфейс PurchasesUpdatedListener из BillingClient для автоматического получения обновлений о покупках.
  • Вызовите метод BillingClient.queryPurchasesAsync() .

После получения новой покупки используйте метод getPurchaseState или purchases.products.get in Play Developer API чтобы определить состояние оплаты новой покупки.

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

Когда пользователь покупает или отменяет покупку одноразового продукта, Google Play отправляет сообщение OneTimeProductNotification . Чтобы обновить состояние покупки на бэкэнде, используйте токен покупки, предоставленный в объекте OneTimeProductNotification , для вызова метода purchases.products.get . Этот метод предоставляет последний статус покупки и потребления с учетом токена покупки.

Когда предварительный заказ выполнен и его статус покупки меняется на ПРИОБРЕТЕНО, вашему клиенту отправляется RTDN. После получения RTDN обработайте покупку предзаказа, как описано в разделе Обработка одноразовых покупок продуктов в вашем бэкэнде .

Вам следует обрабатывать RTDN, связанные с транзакциями, в своем защищенном бэкэнде.

Обработка завершенных транзакций

Когда пользователь совершает единовременную покупку продукта, Google Play отправляет сообщение OneTimeProductNotification с типом ONE_TIME_PRODUCT_PURCHASED . Получив этот RTDN, обработайте покупку, как описано в разделе Обработка единовременных покупок продукта в вашем бэкэнде .

Обработка отмененных транзакций

При отмене единовременной покупки продукта Google Play отправляет сообщение OneTimeProductNotification с типом ONE_TIME_PRODUCT_CANCELED , если вы настроили получение уведомлений разработчика в режиме реального времени. Например, это может произойти, если пользователь не завершает оплату в течение требуемого периода времени или если покупка отменяется разработчиком или по запросу клиента. Когда ваш внутренний сервер получает это уведомление, вызовите метод purchases.products.get , чтобы получить последнее состояние покупки, а затем соответствующим образом обновите свой внутренний сервер, включая права пользователя.

Если единовременная покупка продукта в состоянии Purchased будет возвращена, вы также получите уведомление через API аннулированных покупок .

Обрабатывайте разовые покупки продуктов в своем бэкэнде

Независимо от того, обнаружили ли вы новую покупку через ONE_TIME_PRODUCT_PURCHASED RTDN или были уведомлены в приложении через PurchasesUpdatedListener или вручную извлекая покупки в методе onResume() вашего приложения, вы должны обработать новую покупку. Мы рекомендуем вам обрабатывать обработку покупок в вашем бэкэнде для лучшей безопасности.

Чтобы оформить новую разовую покупку, выполните следующие действия:

  1. Запросите конечную точку purchases.products.get , чтобы получить последний статус одноразовой покупки продукта. Чтобы вызвать этот метод для покупки, вам нужен соответствующий purchaseToken либо из вашего приложения, либо из ONE_TIME_PRODUCT_PURCHASED RTDN.
  2. Вызовите getPurchaseState() и убедитесь, что состояние покупки — PURCHASED .
  3. Подтвердите покупку .
  4. Предоставьте пользователю доступ к контенту. Учетная запись пользователя, связанная с покупкой, может быть идентифицирована с помощью поля obfuscatedExternalAccountId из purchases.products.get , если оно было установлено с помощью setObfuscatedAccountId() при совершении покупки.
    1. Для покупок нерасходуемых продуктов подтвердите доставку контента, вызвав метод purchases.products.acknowledge . Убедитесь, что покупка не была ранее подтверждена, проверив поле acknowledgementState .
    2. Если продукт является потребляемым, отметьте его как потребляемый, вызвав метод purchases.products.consume , чтобы пользователь мог снова купить этот продукт после его потребления. Этот метод также подтверждает покупку.

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