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

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

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

Новые разовые покупки продукции

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

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

После получения новой покупки используйте метод getPurchaseState или purchases.productsv2.getproductpurchasev2 in Play Developer API

для определения состояния оплаты новой покупки.

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

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

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

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

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

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

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

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

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

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

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

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

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

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