Usługi do jednorazowego zakupu mają prostszy cykl życia niż usługi objęte subskrypcją, ale nadal jest kilka stanów i zdarzeń przejścia, które Twój backend musi prawidłowo obsłużyć.
Nowe jednorazowe zakupy produktów
Gdy użytkownik zakończy proces rozliczeń, Twoja aplikacja może wyświetlić informacje o nowym zakupie na jeden z tych sposobów:
- Skonfiguruj usługę
Real-time developer notifications
i włącz usługęGet all notifications for subscriptions and one-time products
, aby otrzymywać informacje o stanie zakupów. - Aby automatycznie otrzymywać aktualizacje dotyczące zakupów, zaimplementuj interfejs
PurchasesUpdatedListener
w usłudzeBillingClient
. - Wywołaj metodę
BillingClient.queryPurchasesAsync()
.
Po otrzymaniu nowego zakupu użyj metody getPurchaseState
lub purchases.products.get in Play Developer API
, aby określić stan płatności nowego zakupu.
Powiadomienia w czasie rzeczywistym dla deweloperów
Gdy użytkownik kupi lub anuluje zakup produktu jednorazowego, Google Play wysyła wiadomość OneTimeProductNotification
. Aby zaktualizować stan zakupu w backendzie, użyj tokena zakupu podanego w obiekcie OneTimeProductNotification
do wywołania metody purchases.products.get
. Ta metoda podaje najnowszy stan zakupu i wykorzystania danego tokena zakupu.
Transmisje RTDN związane z transakcjami powinny być obsługiwane w bezpiecznym backendzie.
Obsługa ukończonych transakcji
Gdy użytkownik dokona jednorazowego zakupu produktu, Google Play wysyła wiadomość OneTimeProductNotification
typu ONE_TIME_PRODUCT_PURCHASED
.
Po jej otrzymaniu przetwarzaj zakup w sposób opisany w sekcji Przetwarzanie jednorazowych zakupów usług w backendzie.
Obsługa anulowanych transakcji
Gdy jednorazowy zakup produktu zostanie anulowany, Google Play wysyła wiadomość OneTimeProductNotification
typu ONE_TIME_PRODUCT_CANCELED
, jeśli masz włączone otrzymywanie powiadomień w czasie rzeczywistym dla deweloperów.
Może się tak zdarzyć, gdy użytkownik nie dokona płatności w wymaganym terminie albo zakup zostanie cofnięty przez dewelopera lub na prośbę klienta. Gdy serwer backendu otrzyma takie powiadomienie, wywołaj metodę purchases.products.get
, aby uzyskać informacje o najnowszym stanie zakupu, a następnie odpowiednio zaktualizuj backend, w tym uprawnienia użytkowników.
Jeśli otrzymasz zwrot środków za jednorazowy zakup produktu w stanie Purchased
, powiadomimy Cię o tym za pomocą interfejsu Voided Purchases API.
Przetwarzaj w backendzie jednorazowe zakupy produktów
Musisz przetworzyć zakup bez względu na to, czy wykryjesz nowy zakup przez RTDN w usłudze ONE_TIME_PRODUCT_PURCHASED
lub otrzymasz powiadomienie w aplikacji za pomocą PurchasesUpdatedListener
lub ręcznie pobierzesz zakupy za pomocą metody onResume()
w aplikacji. Dla większego bezpieczeństwa zalecamy obsługę przetwarzania zakupów w backendzie.
Aby przetworzyć nowy jednorazowy zakup, wykonaj te czynności:
- Wyślij zapytanie do punktu końcowego
purchases.products.get
, aby uzyskać najnowszy stan jednorazowego zakupu produktu. Aby wywołać tę metodę w przypadku zakupu, potrzebujesz odpowiedniego elementupurchaseToken
w aplikacji lub z RTDNONE_TIME_PRODUCT_PURCHASED
. - Zadzwoń pod numer
getPurchaseState()
i upewnij się, że stan zakupu toPURCHASED
. - Zweryfikuj zakup.
- Przyznać użytkownikowi dostęp do treści. Konto użytkownika powiązane z zakupem można zidentyfikować za pomocą pola
obfuscatedExternalAccountId
wpurchases.products.get
, jeśli zostało ono skonfigurowane za pomocąsetObfuscatedAccountId()
podczas dokonywania zakupu.- W przypadku zakupów produktów niezużywających się potwierdź przesłanie treści, wywołując metodę
purchases.products.acknowledge
. Aby mieć pewność, że zakup nie został wcześniej potwierdzony, sprawdź poleacknowledgementState
. - Jeśli produkt jest zużywany, oznacz go jako wykorzystany, wywołując metodę
purchases.products.consume
, aby użytkownik mógł ponownie kupić produkt, gdy go zużywa. Ta metoda potwierdza również zakup.
- W przypadku zakupów produktów niezużywających się potwierdź przesłanie treści, wywołując metodę
W Bibliotece płatności w Play są też dostępne metody potwierdzania zakupów i korzystania z nich, które umożliwiają przetwarzanie zakupów w Twojej aplikacji. Jeśli jednak masz taką implementację, zalecamy obsługę przetwarzania w swoim backendzie.