Os produtos de compra única têm um ciclo de vida mais simples do que os por assinatura, mas ainda há vários estados e eventos de transição que o back-end precisa para processar corretamente.
Novas compras de produtos únicos
Depois que o usuário conclui o fluxo de faturamento, o app pode acessar informações sobre a nova compra de uma destas maneiras:
- Configure
Real-time developer notifications
e ativeGet all notifications for subscriptions and one-time products
para receber atualizações sobre o status das compras. - Implemente a interface
PurchasesUpdatedListener
deBillingClient
para receber atualizações automáticas sobre a compra. - Chame o método
BillingClient.queryPurchasesAsync()
.
Depois de receber a nova compra, use o
método getPurchaseState
ou
purchases.productsv2.getproductpurchasev2 in Play Developer API
para determinar o estado de pagamento da nova compra.
Notificações do desenvolvedor em tempo real
Quando um usuário compra ou cancela a compra de um produto único, o Google Play
envia uma mensagem OneTimeProductNotification
.
Para atualizar o estado de compra do back-end, use o token fornecido no objeto
OneTimeProductNotification
para chamar o
método
purchases.productsv2.getproductpurchasev2
. Esse método fornece o status de compra e consumo mais recente, considerando um
token de compra.
Quando uma pré-venda é concluída e o estado da compra muda para "COMPRADO", uma RTDN é enviada ao seu cliente. Depois de receber a RTDN, processe a compra na pré-venda conforme descrito em Processar compras de produtos únicos no back-end.
Processe os RTDNs relacionados a transações no back-end seguro.
Processar transações concluídas
Quando um usuário conclui uma compra de um produto único, o Google Play envia uma
mensagem OneTimeProductNotification
com o tipo ONE_TIME_PRODUCT_PURCHASED
.
Quando você receber esse RTDN, processe a compra conforme descrito em Processar
compras de produtos únicos no back-end.
Processar transações canceladas
Quando uma compra única é cancelada, o Google Play envia uma
mensagem OneTimeProductNotification
com o tipo ONE_TIME_PRODUCT_CANCELED
se você tiver configurado para receber notificações do desenvolvedor em tempo real. Por
exemplo, isso pode acontecer se o usuário não concluir o pagamento dentro do período
necessário ou se a compra for revogada pelo desenvolvedor ou por solicitação do
cliente. Quando o servidor de back-end receber essa notificação, chame o método
purchases.productsv2.getproductpurchasev2
para conferir o estado mais recente da compra e atualize o back-end de acordo com ele,
incluindo os direitos do usuário.
Se uma compra de produto único no estado Purchased
for reembolsada, você também
vai receber uma notificação pela API Voided Purchases.
Processar compras de produtos únicos no back-end
Se você detectou uma nova compra usando uma RTDN de ONE_TIME_PRODUCT_PURCHASED
ou recebeu um aviso no app usando
PurchasesUpdatedListener
ou buscando manualmente
compras no método onResume()
do app, será preciso processar
a nova compra. Recomendamos processar as compras no
back-end para maior segurança.
Siga estas etapas para processar uma nova compra única:
- Consulte o endpoint
purchases.productsv2.getproductpurchasev2
para conferir o status mais recente da compra do produto único. Para chamar esse método para uma compra, você precisa dopurchaseToken
correspondente do seu app ou do RTDNONE_TIME_PRODUCT_PURCHASED
. - Chame
getPurchaseState()
e verifique se o estado de compra éPURCHASED
. - Verifique a compra.
- Conceda ao usuário o acesso ao conteúdo. A conta de usuário associada à
compra poderá ser identificada com o campo
obfuscatedExternalAccountId
depurchases.productsv2.getproductpurchasev2
se um código tiver sido definido usandosetObfuscatedAccountId()
quando a compra foi feita.- Para compras de produtos que não são de consumo, confirme o envio do
conteúdo chamando o método
purchases.products.acknowledge
. Confira se a compra não foi confirmada anteriormente verificando o campoacknowledgementState
. - Se o produto for de consumo, marque o item como consumido chamando o método
purchases.products.consume
. Assim, o usuário poderá comprar o item novamente depois de consumi-lo. Esse método também confirma a compra.
- Para compras de produtos que não são de consumo, confirme o envio do
conteúdo chamando o método
A Biblioteca Play Faturamento também tem disponíveis confirmações de compra e métodos de consumo que permitem processar compras no seu app, mas recomendamos processá-la no back-end, se você tiver um, para ter uma implementação mais segura.