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 notificationsi włączGet all notifications for subscriptions and one-time products, aby otrzymywać aktualizacje stanu zakupów. - Zaimplementuj interfejs
PurchasesUpdatedListenerzBillingClient, 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ć odpowiednipurchaseTokenz aplikacji lub zONE_TIME_PRODUCT_PURCHASEDRTDN. - 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
obfuscatedExternalAccountIdzpurchases.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.