Produkty kupowane w ramach jednorazowego zakupu mają prostszy cykl życia niż produkty objęte subskrypcją, ale nadal mają kilka stanów i zdarzeń przejścia, które Twój backend musi obsługiwać prawidłowo.
Nowe zakupy produktów kupowanych raz
Gdy użytkownik zakończy proces płatności, Twoja aplikacja może zobaczyć informacje o nowym zakupie w jeden z tych sposobów:
- Skonfiguruj
Real-time developer notificationsi włącz opcjęGet all notifications for subscriptions and one-time products, aby otrzymywać aktualizacje stanu zakupów. - Zaimplementuj interfejs
PurchasesUpdatedListenerzBillingClient, aby automatycznie otrzymywać aktualizacje zakupów. - Wywołaj
BillingClient.queryPurchasesAsync()metodę.
Po otrzymaniu informacji o nowym zakupie użyj metody
getPurchaseState lub
purchases.productsv2.getproductpurchasev2 in Play Developer API
, aby określić stan płatności za nowy zakup.
Powiadomienia w czasie rzeczywistym dla deweloperów
Gdy użytkownik kupi produkt kupowany raz lub anuluje jego zakup, Google Play
wyśle wiadomość OneTimeProductNotification.
Aby zaktualizować stan zakupu w backendzie, użyj tokena zakupu podanego w obiekcie
OneTimeProductNotification, aby wywołać metodę
purchases.productsv2.getproductpurchasev2. Ta metoda podaje najnowszy stan zakupu i wykorzystania na podstawie tokena zakupu.
Gdy przedsprzedaż zostanie zrealizowana, a jej stan zakupu zmieni się na PURCHASED, do klienta zostanie wysłane powiadomienie w czasie rzeczywistym dla deweloperów. Po otrzymaniu powiadomienia w czasie rzeczywistym dla deweloperów przetwórz zakup przedsprzedaży zgodnie z opisem w sekcji Przetwarzanie zakupów produktów kupowanych raz w backendzie.
Powiadomienia w czasie rzeczywistym dla deweloperów związane z transakcjami należy obsługiwać w bezpiecznym backendzie.
Obsługa zakończonych transakcji
Gdy użytkownik zakończy zakup produktu kupowanego raz, Google Play wyśle wiadomość OneTimeProductNotification z typem ONE_TIME_PRODUCT_PURCHASED.
Gdy otrzymasz to powiadomienie w czasie rzeczywistym dla deweloperów, przetwórz zakup zgodnie z opisem w sekcji Przetwarzanie
zakupów produktów kupowanych raz w backendzie.
Obsługa anulowanych transakcji
Gdy zakup produktu kupowanego raz zostanie anulowany, Google Play wyśle wiadomość OneTimeProductNotification z typem ONE_TIME_PRODUCT_CANCELED, jeśli skonfigurujesz otrzymywanie powiadomień w czasie rzeczywistym dla deweloperów. Może się tak zdarzyć np. wtedy, gdy użytkownik nie dokończy płatności w wymaganym czasie lub gdy zakup zostanie cofnięty 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 zaktualizuj backend,
w tym uprawnienia użytkownika.
Jeśli zakup produktu kupowanego raz w stanie Purchased zostanie zwrócony, poinformujemy Cię o tym za pomocą interfejsu Voided Purchases API.
Przetwarzanie zakupów produktów kupowanych raz w backendzie
Niezależnie od tego, czy wykryjesz nowy zakup za pomocą ONE_TIME_PRODUCT_PURCHASED
powiadomienia w czasie rzeczywistym dla deweloperów
czy też dowiesz się o nim w aplikacji za pomocą
PurchasesUpdatedListener lub ręcznego pobierania
zakupów w metodzie onResume() aplikacji, musisz przetworzyć
nowy zakup. Ze względów bezpieczeństwa zalecamy obsługę przetwarzania zakupów w backendzie.
Aby przetworzyć nowy zakup jednorazowy:
- Wyślij zapytanie do punktu końcowego
purchases.productsv2.getproductpurchasev2, aby uzyskać najnowszy stan zakupu produktu kupowanego raz. Aby wywołać tę metodę w przypadku zakupu, potrzebujesz odpowiedniegopurchaseTokenz aplikacji lub powiadomienia w czasie rzeczywistym dla deweloperówONE_TIME_PRODUCT_PURCHASED. - Wywołaj
getPurchaseState()i upewnij się, że stan zakupu toPURCHASED. - Zweryfikuj zakup.
- Udostępnij użytkownikowi treści. Konto użytkownika powiązane z
zakupem można zidentyfikować za pomocą
obfuscatedExternalAccountIdpola zpurchases.productsv2.getproductpurchasev2, jeśli zostało ono ustawione za pomocąsetObfuscatedAccountId()podczas zakupu.- W przypadku zakupu produktu niekonsumpcyjnego potwierdź dostarczenie
treści, wywołując
purchases.products.acknowledgemetodę. Upewnij się, że zakup nie został wcześniej potwierdzony, sprawdzając poleacknowledgementState. - Jeśli produkt jest konsumpcyjny, oznacz go jako wykorzystany, wywołując metodę
purchases.products.consume, aby użytkownik mógł go ponownie kupić po wykorzystaniu. Ta metoda potwierdza też zakup.
- W przypadku zakupu produktu niekonsumpcyjnego potwierdź dostarczenie
treści, wywołując
W Bibliotece płatności w Play dostępne są też metody potwierdzania zakupu i wykorzystania, które umożliwiają przetwarzanie zakupów z aplikacji, ale ze względów bezpieczeństwa zalecamy obsługę przetwarzania w backendzie, jeśli go masz.