Produkty kupowane jednorazowo mają prostszy cykl życia niż produkty subskrypcyjne, ale nadal istnieje kilka stanów i zdarzeń przejścia, które backend musi obsługiwać prawidłowo.
Nowe zakupy produktów kupowanych raz
Po zakończeniu procesu płatności użytkownik może zobaczyć informacje o nowym zakupie w aplikacji na jeden z tych sposobów:
- Skonfiguruj
Real-time developer notifications
i włączGet all notifications for subscriptions and one-time products
, aby otrzymywać aktualizacje stanu zakupów. - Zaimplementuj interfejs
PurchasesUpdatedListener
zBillingClient
, aby automatycznie otrzymywać aktualizacje dotyczące zakupu. - Wywołaj metodę
BillingClient.queryPurchasesAsync()
.
Po otrzymaniu nowego zakupu użyj metody getPurchaseState
lub purchases.productsv2.getproductpurchasev2 in Play Developer API
.
określić stan płatności za nowy zakup.
Powiadomienia w czasie rzeczywistym dla deweloperów
Gdy użytkownik kupi lub anuluje zakup produktu kupowanego raz, Google Play wysyła wiadomość OneTimeProductNotification
.
Aby zaktualizować stan zakupu na serwerze backendu, użyj tokena zakupu podanego w obiekcie
OneTimeProductNotification
, aby wywołać metodę
purchases.productsv2.getproductpurchasev2
. Ta metoda zwraca najnowszy stan zakupu i konsumpcji na podstawie tokena zakupu.
Gdy zamówienie w przedsprzedaży zostanie zrealizowane, a jego stan zakupu zmieni się na ZAKUPIONO, do klienta zostanie wysłany RTDN. Po otrzymaniu RTDN przetwórz zakup w przedsprzedaży zgodnie z opisem w artykule Przetwarzanie jednorazowych zakupów produktów w systemie backend.
Z powiązanymi z transakcjami powiadomieniami RTDN należy postępować w bezpiecznym backendzie.
Obsługa ukończonych transakcji
Gdy użytkownik dokona zakupu produktu jednorazowego, Google Play wyśle wiadomośćOneTimeProductNotification
o typie ONE_TIME_PRODUCT_PURCHASED
.
Gdy otrzymasz to powiadomienie RTDN, przetwórz zakup zgodnie z opisem w sekcji Przetwarzanie jednorazowych zakupów produktów na serwerze backendu.
Obsługa anulowanych transakcji
Gdy zakup produktu kupowanego raz zostanie anulowany, Google Play wyśle wiadomość z typem ONE_TIME_PRODUCT_CANCELED
, jeśli masz skonfigurowane otrzymywanie powiadomień dla deweloperów w czasie rzeczywistym.OneTimeProductNotification
Może się to zdarzyć np. wtedy, gdy użytkownik nie dokończy płatności w wymaganym czasie lub gdy zakup zostanie anulowany przez dewelopera albo na prośbę klienta. Gdy serwer backendu otrzyma to powiadomienie, wywołaj metodę purchases.productsv2.getproductpurchasev2
, aby uzyskać najnowszy stan zakupu, a następnie odpowiednio zaktualizuj backend, w tym uprawnienia użytkownika.
Jeśli zakup produktu kupowanego raz w stanie Purchased
zostanie zwrócony, otrzymasz powiadomienie za pomocą interfejsu Voided Purchases API.
Przetwarzanie jednorazowych zakupów produktów na backendzie
Niezależnie od tego, czy wykryjesz nowy zakup za pomocą ONE_TIME_PRODUCT_PURCHASED
RTDN
czy dowiesz się o nim w aplikacji za pomocą PurchasesUpdatedListener
lub ręcznego pobierania
zakupów w metodzie onResume()
aplikacji, musisz przetworzyć nowy zakup. Zalecamy przetwarzanie zakupów na serwerze backendu, aby zwiększyć bezpieczeństwo.
Aby przetworzyć nowy zakup jednorazowy:
- Wyślij zapytanie do punktu końcowego
purchases.productsv2.getproductpurchasev2
, aby uzyskać najnowszy stan jednorazowego zakupu produktu. Aby wywołać tę metodę w przypadku zakupu, musisz mieć odpowiednipurchaseToken
z aplikacji lub zONE_TIME_PRODUCT_PURCHASED
RTDN. - Zadzwoń pod numer
getPurchaseState()
i upewnij się, że stan zakupu toPURCHASED
. - Zweryfikuj zakup.
- Przyznaj użytkownikowi dostęp do treści. Konto użytkownika powiązane z zakupem można zidentyfikować za pomocą pola
obfuscatedExternalAccountId
zpurchases.productsv2.getproductpurchasev2
, jeśli zostało ono ustawione za pomocąsetObfuscatedAccountId()
podczas dokonywania zakupu.- W przypadku zakupu produktu niekonsumpcyjnego potwierdź dostarczenie treści, wywołując metodę
purchases.products.acknowledge
. Sprawdź, czy zakup nie został wcześniej zatwierdzony, sprawdzając poleacknowledgementState
. - Jeśli produkt jest zużywalny, oznacz go jako zużyty, wywołując metodę
purchases.products.consume
, aby użytkownik mógł kupić go ponownie po zużyciu. Ta metoda również potwierdza zakup.
- W przypadku zakupu produktu niekonsumpcyjnego potwierdź dostarczenie treści, wywołując metodę
W Bibliotece płatności w Google Play dostępne są też metody potwierdzania zakupu i wykorzystania, które umożliwiają przetwarzanie zakupów w aplikacji. Zalecamy jednak, aby w celu zwiększenia bezpieczeństwa implementacji przetwarzać zakupy na serwerze backendu, jeśli go masz.