Продукты, приобретаемые единоразово, имеют более простой жизненный цикл, чем продукты по подписке, но все же существует несколько состояний и событий перехода, которые ваша серверная часть должна уметь правильно обрабатывать.
Новые разовые покупки товаров
После того как пользователь завершит процесс выставления счета, ваше приложение сможет просмотреть информацию о новой покупке одним из следующих способов:
- Настройте
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, связанные с транзакциями, в своем защищенном бэкэнде.
Обрабатывать завершенные транзакции
Когда пользователь совершает единоразовую покупку продукта, 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 также доступны методы подтверждения покупки и использования, которые позволяют обрабатывать покупки из вашего приложения, но мы рекомендуем вам обрабатывать обработку на своем серверном сервере, если он у вас есть, для более безопасной реализации.