Продукты с одноразовой покупкой имеют более простой жизненный цикл, чем продукты с подпиской, но все равно существует несколько состояний и событий перехода, которые ваш бэкэнд должен уметь правильно обрабатывать.
Новые единовременные покупки продукта
После того, как пользователь завершит процесс оплаты, ваше приложение может увидеть информацию о новой покупке одним из следующих способов:
- Настройте
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()
вашего приложения, вы должны обработать новую покупку. Мы рекомендуем вам обрабатывать обработку покупок в вашем бэкэнде для лучшей безопасности.
Чтобы оформить новую разовую покупку, выполните следующие действия:
- Запросите конечную точку
purchases.products.get
, чтобы получить последний статус одноразовой покупки продукта. Чтобы вызвать этот метод для покупки, вам нужен соответствующийpurchaseToken
либо из вашего приложения, либо изONE_TIME_PRODUCT_PURCHASED
RTDN. - Вызовите
getPurchaseState()
и убедитесь, что состояние покупки —PURCHASED
. - Подтвердите покупку .
- Предоставьте пользователю доступ к контенту. Учетная запись пользователя, связанная с покупкой, может быть идентифицирована с помощью поля
obfuscatedExternalAccountId
изpurchases.products.get
, если оно было установлено с помощьюsetObfuscatedAccountId()
при совершении покупки.- Для покупок нерасходуемых продуктов подтвердите доставку контента, вызвав метод
purchases.products.acknowledge
. Убедитесь, что покупка не была ранее подтверждена, проверив полеacknowledgementState
. - Если продукт является потребляемым, отметьте его как потребляемый, вызвав метод
purchases.products.consume
, чтобы пользователь мог снова купить этот продукт после его потребления. Этот метод также подтверждает покупку.
- Для покупок нерасходуемых продуктов подтвердите доставку контента, вызвав метод
В библиотеке Play Billing Library также доступны методы подтверждения и использования покупок, которые позволяют обрабатывать покупки из вашего приложения, но мы рекомендуем вам выполнять обработку в вашем бэкэнде, если он у вас есть, для более безопасной реализации.