Cykl życia jednorazowego zakupu

Produkty kupowane jednorazowo mają prostszy cykl życia niż produkty z subskrypcją, ale nadal istnieje kilka stanów i zdarzeń przejściowych, które backend musi obsługiwać prawidłowo.

Ilustracja 1. Stany cyklu życia i zdarzenia przejścia w przypadku jednorazowych zakupów.

Nowe zakupy produktów kupowanych raz

Gdy użytkownik zakończy proces płatności, Twoja aplikacja może uzyskać informacje o nowym zakupie w jeden z tych sposobów:

Po otrzymaniu nowego zakupu użyj metody getPurchaseState lub purchases.products.get 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 lub anuluje zakup produktu kupowanego raz, Google Play wyśle wiadomośćOneTimeProductNotification. Aby zaktualizować stan zakupu na zapleczu, użyj tokenu zakupu udostępnionego w obiekcie OneTimeProductNotification do wywołania metody purchases.products.get. Ta metoda umożliwia uzyskanie najnowszego stanu zakupu i konsumpcji na podstawie tokena zakupu.

Gdy zamówienie w przedsprzedaży zostanie zrealizowane i jego stan zmieni się na ZAKUPIONE, do Twojego klienta zostanie wysłany RTDN. Po otrzymaniu RTDN przetwórz zamówienie w przedsprzedaży zgodnie z opisem w artykule Przetwarzanie jednorazowych zakupów produktów na zapleczu.

Dane RTDN związane z transakcją należy obsługiwać w bezpiecznym backendzie.

Obsługa ukończonych transakcji

Gdy użytkownik kupi produkt jednorazowy, Google Play wyśle wiadomość OneTimeProductNotification typu ONE_TIME_PRODUCT_PURCHASED. Gdy otrzymasz to powiadomienie RTDN, przetwórz zakup zgodnie z opisem w artykule Przetwarzanie jednorazowych zakupów produktów na zapleczu.

Obsługa anulowanych transakcji

Gdy anulujesz zakup produktu jednorazowego, Google Play wyśle wiadomość OneTimeProductNotification typu ONE_TIME_PRODUCT_CANCELED, jeśli masz włączone powiadomienia od dewelopera w czasie rzeczywistym. Może się tak zdarzyć, jeśli użytkownik nie dokona płatności w wymaganym terminie lub jeśli deweloper lub klient anuluje zakup. Gdy serwer zaplecza otrzyma to powiadomienie, wywołaj metodę purchases.products.get, aby uzyskać najnowszy stan zakupu, a następnie zaktualizuj odpowiednio zaplecze, w tym uprawnienia użytkowników.

Jeśli zakup produktu jednorazowego w stanie Purchased zostanie zwrócony, otrzymasz o tym powiadomienie za pomocą interfejsu API anulowanych zakupów.

Przetwarzanie jednorazowych zakupów produktów na zapleczu

Niezależnie od tego, czy wykryto nowy zakup za pomocą ONE_TIME_PRODUCT_PURCHASED powiadomienia w czasie rzeczywistym, czy też powiadomiono Cię o nim w aplikacji za pomocą PurchasesUpdatedListener lub ręcznego pobierania zakupów za pomocą metody onResume() aplikacji, musisz przetworzyć nowy zakup. Ze względów bezpieczeństwa zalecamy przetwarzanie zakupów na zapleczu.

Aby przetworzyć nowy zakup jednorazowy:

  1. Wyszukaj punkt końcowy purchases.products.get, aby uzyskać najnowszy stan jednorazowego zakupu produktu. Aby wywołać tę metodę w celu dokonania zakupu, musisz mieć odpowiednią wartość purchaseToken z aplikacji lub z ONE_TIME_PRODUCT_PURCHASED RTDN.
  2. Zadzwoń pod numer getPurchaseState() i upewnij się, że stan zakupu to PURCHASED.
  3. Zweryfikuj zakup.
  4. Przyznaj użytkownikowi dostęp do treści. Konto użytkownika powiązane z zakupem można zidentyfikować za pomocą pola obfuscatedExternalAccountIdpurchases.products.get, jeśli zostało ono ustawione za pomocą pola setObfuscatedAccountId() podczas dokonywania zakupu.
    1. W przypadku zakupu produktów niekonsumpcyjnych potwierdź dostarczenie treści, wywołując metodę purchases.products.acknowledge. Sprawdź, czy zakup nie został wcześniej zatwierdzony, sprawdzając pole acknowledgementState.
    2. Jeśli produkt jest konsumpcyjny, oznacz go jako zużyty, wywołując metodę purchases.products.consume, aby użytkownik mógł go ponownie kupić po zużyciu. Ta metoda również potwierdza zakup.

W Bibliotece rozliczeniowej Google Play dostępne są też metody potwierdzania i przetwarzania zakupów, które umożliwiają przetwarzanie zakupów w aplikacji, ale ze względów bezpieczeństwa zalecamy przetwarzanie na zapleczu.