Wszystkie artykuły
Deep dive8 min czytania

Jeśli nie potwierdzisz zakupu w Google Play w ciągu trzech dni, Google go zwróci, a oto ile cię to kosztuje

Google Play automatycznie zwraca i unieważnia każdy zakup, którego twój serwer nie potwierdzi w ciągu trzech dni. To błąd integracji, a nie decyzja klienta, i można mu w pełni zapobiec. Oto dokładna zasada, dlaczego się uruchamia i ile naprawdę kosztuje cię każda utracona sprzedaż.

Kończąca się klepsydra obok smartfona, ilustrująca trzydniowe okno na potwierdzenie zakupu w Google Play, zanim zostanie automatycznie zwrócony

Najważniejsze wnioski

  • Google Play automatycznie zwraca pieniądze kupującemu i unieważnia zakup, jeśli twoja aplikacja nie potwierdzi go w ciągu trzech dni. To błąd integracji, a nie decyzja klienta, i można mu w pełni zapobiec po stronie serwera.
  • Trzydniowy zegar rusza, gdy stan zakupu staje się PURCHASED, a nie gdy zaczyna się finalizacja. Zakup pozostający w stanie PENDING nie uruchomił jeszcze zegara i nie wolno go jeszcze potwierdzać.
  • Dwa wywołania spełniają wymóg. Skonsumowanie produktu jednorazowego przez purchases.products.consume oraz potwierdzenie produktu wielorazowego lub subskrypcji przez purchases.products.acknowledge lub purchases.subscriptions.acknowledge oba liczą się jako potwierdzenie.
  • Potwierdzenia wymaga tylko pierwszy zakup subskrypcji. Odnowienia nie, a Google automatycznie oznacza je jako ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED.
  • Plany przedpłacone krótsze niż tydzień muszą zostać potwierdzone w ciągu połowy czasu trwania planu, co jest ostrzejszym terminem niż standardowe trzy dni.
  • Zwrot odbiera cenę sprzedaży, ale moc obliczeniowa, wywołania API modelu, pamięć masowa i wypłaty dla twórców, które już wydałeś na dostarczenie produktu, nie są zwracane. Pieniądze, które tracisz, są większe niż pozycja na rachunku.
  • Apple nie ma odpowiednika. Niezakończona transakcja StoreKit jest dostarczana ponownie, dopóki jej nie zakończysz, ale Apple nigdy nie zwraca za nią pieniędzy automatycznie. Ten tryb awarii występuje wyłącznie w Google Play.

Klient kupuje twój produkt, płatność przechodzi, a trzy dni później Google Play po cichu zwraca pieniądze i wycofuje to, co dostarczyłeś. Nikt nie prosił o ten zwrot. Klient go nie zażądał i żaden pracownik wsparcia go nie przyznał. Uruchomił się, ponieważ twój serwer nigdy nie poinformował Google, że zakup został obsłużony. Jeśli nie potwierdzisz zakupu w Google Play w ciągu trzech dni, Google zwraca pieniądze kupującemu i unieważnia zakup, za każdym razem. To jeden z niewielu zwrotów w którymkolwiek ze sklepów, któremu w pełni zapobiega twoja integracja, i jeden z najcichszych sposobów utraty przychodu.

To nie jest problem oszustwa ani spór o zasady. To pominięte wywołanie zwrotne. Naprawa jest niewielka, a koszt jej pominięcia to realne pieniądze, więc warto poznać dokładnie tę zasadę, dlaczego zakupy prześlizgują się bez potwierdzenia i co tak naprawdę zabiera ze sobą każda utracona sprzedaż.

Co właściwie mówi zasada trzech dni

Dokumentacja Play Billing od Google mówi o tym bez ogródek. Po tym, jak twoja aplikacja przyzna uprawnienie i powiadomi użytkownika, że zakup się powiódł, musi powiadomić Google, że zakup został przetworzony. Słowami Google "musi to nastąpić w ciągu trzech dni, aby zakup nie został automatycznie zwrócony, a uprawnienie unieważnione." Strona o produktach jednorazowych powtarza to bez łagodzenia: "Jeśli nie potwierdzisz zakupu w ciągu trzech dni, użytkownik automatycznie otrzyma zwrot, a Google Play unieważni zakup." Subskrypcje niosą identyczną zasadę dla pierwszego zakupu.

Potwierdzenie to sygnał, a nie formalność. Mówi Google, że uprawnienie dotarło do użytkownika. Google traktuje brak tego sygnału jako dostawę, która nigdy nie nastąpiła, i cofa transakcję w imieniu klienta. Ze strony kupującego wygląda to jak darmowy zwrot, o który nigdy nie prosił. Z twojej strony wygląda to jak sprzedaż, która wyparowała.

Zegar rusza przy PURCHASED, a nie przy finalizacji

Trzydniowe okno nie zaczyna się, gdy użytkownik dotyka kup. Zaczyna się, gdy stan zakupu przechodzi do PURCHASED. Zakup może najpierw pozostawać w stanie PENDING, co zdarza się przy płatnościach gotówkowych, powolnych przelewach bankowych lub gdy rodzic zatwierdza prośbę dziecka. Google jest wyraźne: "Trzydniowe okno potwierdzenia zaczyna się dopiero, gdy stan zakupu przechodzi z PENDING do PURCHASED."

Ma to dwie konsekwencje. Przyznawaj uprawnienie tylko wtedy, gdy stan to PURCHASED, nigdy przy PENDING, w przeciwnym razie wydajesz produkt za płatność, która może nigdy się nie zakończyć. I nie potwierdzaj też zakupu PENDING. Wywołujesz enablePendingPurchases(), gdy budujesz BillingClient, czekasz na przejście i dopiero wtedy uruchamiasz w głowie zegar potwierdzenia.

Potwierdź lub skonsumuj, i które jesteś winien

Są dwa sposoby spełnienia wymogu, a to, którego użyjesz, zależy od produktu. Oba dotrzymują trzydniowego terminu. Różnica polega na tym, co jeszcze robią.

Produkt jednorazowy konsumujesz. Na bezpiecznym zapleczu to purchases.products.consume, lub po stronie klienta consumeAsync() w Play Billing Library. Skonsumowanie zarazem potwierdza zakup i sprawia, że produkt znów da się kupić, co jest dokładnie tym, czego chcesz dla monet, kredytów lub jednorazowej generacji. Produkt wielorazowy lub subskrypcję potwierdzasz: purchases.products.acknowledge lub purchases.subscriptions.acknowledge na zapleczu, albo acknowledgePurchase() po stronie klienta. Potwierdzenie dotrzymuje terminu bez uwalniania produktu do ponownego zakupu.

Typ zakupuWywołanie, które dotrzymuje terminuCo jeszcze robiTermin
Produkt jednorazowypurchases.products.consume lub consumeAsync()Sprawia też, że produkt da się kupić ponownie3 dni od PURCHASED
Produkt wielorazowypurchases.products.acknowledge lub acknowledgePurchase()Oznacza uprawnienie jako przyznane, bez ponownego zakupu3 dni od PURCHASED
Subskrypcja, pierwszy zakuppurchases.subscriptions.acknowledge lub acknowledgePurchase()Potwierdza nową subskrypcję3 dni od PURCHASED
Odnowienie subskrypcjiNic nie jest wymaganeAutomatycznie oznaczane jako potwierdzone przez GoogleNie dotyczy
Plan przedpłacony poniżej tygodniaPotwierdź jak powyżejPotwierdza uprawnieniePołowa czasu trwania planu

Odnowienia są już obsłużone, pierwsze zakupy nie

Potwierdzenie jesteś winien tylko przy pierwszym zakupie subskrypcji. Google stwierdza wprost, że "nie musisz potwierdzać odnowień subskrypcji," i samo stempluje odnowienia jako ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED. Nowy zakup przychodzi jako ACKNOWLEDGEMENT_STATE_PENDING i pozostaje twoją odpowiedzialnością, dopóki go nie rozliczysz. Zanim potwierdzisz, sprawdź acknowledgementState na zapleczu lub isAcknowledged() po stronie klienta, aby nie potwierdzić dwukrotnie.

Plany przedpłacone dostają krótszy lont

Przedpłacone plany subskrypcji zawężają okno. Zasada Google: plany przedpłacone trwające tydzień lub dłużej muszą zostać potwierdzone w ciągu trzech dni, ale "plany przedpłacone o czasie trwania krótszym niż tydzień muszą zostać potwierdzone w ciągu połowy czasu trwania planu." Trzydniowy plan przedpłacony daje ci półtora dnia, a nie trzy dni. Jeśli sprzedajesz krótkie doładowania przedpłacone, twoja ścieżka potwierdzenia musi być szybka i sterowana przez serwer, a nie zależna od ponownego otwarcia aplikacji przez użytkownika.

Dlaczego zakupy w ogóle pozostają niepotwierdzone

Nikt nie zamierza pomijać potwierdzenia. Prześlizguje się, ponieważ kod, który potwierdza, znajduje się w niewłaściwym miejscu. Typowym antywzorcem jest klient, który potwierdza tylko wtedy, gdy proces zakupu wraca na pierwszy plan. Działa to dla użytkownika, który kończy zakup i dalej korzysta z aplikacji. Dla wszystkich innych zawodzi.

Deweloperzy natrafiają na to bez przerwy. Wątki we własnej społeczności deweloperów Google za każdym razem czytają się tak samo, jakiś wariant "użytkownik automatycznie dostał zwrot po zakupie z mojej aplikacji po trzech dniach" oraz "dlaczego płatności są automatycznie zwracane po trzech dniach." Odpowiedź jest niemal zawsze ta sama: wywołanie potwierdzenia nigdy nie zadziałało, ponieważ aplikacja nigdy nie była w stanie, by je uruchomić.

Bezpłatny okres próbny i użytkownik, który nigdy nie wraca

Najgorsza wersja to bezpłatny okres próbny lub zakup tuż przed tym, jak użytkownik zamyka aplikację na dobre. Jeśli twoje potwierdzenie zależy od następnego otwarcia aplikacji, a następnego otwarcia nie ma, zakup się przeterminowuje. Trzeciego dnia Google zwraca za niego pieniądze i go unieważnia. W przypadku okresu próbnego, który przekształciłby się w płatną subskrypcję, tracisz pierwsze rozliczenie, którego nigdy nie zdołałeś pobrać, oraz uprawnienie klienta, które po cichu zniknęło. Żadne z tych zdarzeń nie pojawia się jako zgłoszenie do wsparcia. Pojawia się jako unieważniony zakup, którego musisz szukać.

Ile naprawdę kosztuje niepotwierdzony zwrot

Pozycja zwrotu zaniża stratę. Gdy Google cofa sprzedaż, oddajesz cenę, i to jest widoczna liczba. To nie cały rachunek.

Pomyśl o produkcie jednorazowym, który uruchamia realną pracę w chwili zakupu. Partia generacji obrazów, seria wywołań do API dostawcy modelu, eksport wideo, wypłata dla twórcy. Za tę moc obliczeniową, te wywołania API, tę pamięć masową i te wypłaty zapłaciłeś w momencie użycia. Zwrot oddaje klientowi cenę sprzedaży. Nie oddaje tobie faktury od dostawcy. Dostarczyłeś realny koszt i nic za niego nie dostałeś.

W przypadku subskrypcji i okresów próbnych stratą jest pierwsze rozliczenie, którego nigdy nie pobierasz, oraz relacja z klientem, która skończyła się, zanim się zaczęła. A od 3 sierpnia 2026 roku Google Play przenosi cenę zakupu przy obciążeniach zwrotnych i opłaty bankowe na deweloperów w przypadku zamówień złożonych po tej dacie, co sprawia, że każdy możliwy do uniknięcia wyciek przychodu warto zamknąć teraz, a nie później. Niepotwierdzony zwrot to nie obciążenie zwrotne, ale to ta sama lekcja: pieniądze, które już wydałeś, nie są automatycznie pieniędzmi, które zatrzymujesz.

Złożony paragon i monety wyciągane z powrotem po ciemnym stole, ilustrujące już wydane pieniądze, gdy niepotwierdzony zakup w Google Play zostaje zwrócony i unieważniony

Jak potwierdzić zakup w Google Play po stronie serwera

Niezawodny wzorzec usuwa aplikację ze ścieżki krytycznej. Rób to na swoim zapleczu, sterowane powiadomieniami, a nie ponownym otwarciem ekranu przez użytkownika.

  • Nasłuchuj Real-time developer notifications. Zakup ONE_TIME_PRODUCT lub zdarzenie SUBSCRIPTION_PURCHASED mówi twojemu serwerowi, że zakup istnieje, w chwili gdy dowiaduje się o tym Google, niezależnie od tego, czy aplikacja jest otwarta.
  • Zweryfikuj token zakupu w Play Developer API i potwierdź, że stan to PURCHASED, a nie PENDING.
  • Przyznaj uprawnienie w swoich własnych rejestrach, powiązane z użytkownikiem.
  • Potwierdź lub skonsumuj natychmiast. Konsumuj produkty jednorazowe, potwierdzaj produkty wielorazowe i pierwsze subskrypcje. Najpierw sprawdź acknowledgementState, aby nigdy nie potwierdzić dwukrotnie.
  • Uzupełniaj także po stronie klienta. Wywołuj queryPurchasesAsync() w onResume(), aby każdy zakup zakończony, gdy aplikacja była zamknięta, wciąż został przetworzony. To siatka bezpieczeństwa, a nie główna ścieżka.

Chodzi o to, że potwierdzenie uruchamia się na podstawie zdarzenia, które przysyła ci Google, a nie działania użytkownika, na którym nie możesz polegać. Użytkownik, który kupuje i nigdy nie wraca, jest w pełni zabezpieczony, ponieważ twój serwer zadziałał w chwili, gdy zakup dotarł.

Siatka uzgadniania dla tych, które się prześlizgują

Nawet czysty potok korzysta na kontroli. Voided Purchases API wymienia zakupy, które zostały zwrócone, unieważnione lub obciążone zwrotnie, i nazywa przypadek, w którym powodem jest to, że zakup "nigdy nie został potwierdzony przez dewelopera i dlatego może nie istnieć w rejestrach dewelopera." Odpytuj je, a możesz cofnąć uprawnienie, które przyznałeś za wszystko, co Google już cofnęło. Zwróć uwagę na ograniczenie: API zwraca tylko unieważnione zakupy z ostatnich 30 dni, więc uzgadnianie musi działać według harmonogramu, a nie raz na kwartał.

Apple nie ma odpowiednika, i to ma znaczenie

To konkretnie problem Google Play. StoreKit od Apple też ma krok kończący, zakończenie transakcji, ale w razie niepowodzenia robi coś przeciwnego. Jeśli nigdy nie zakończysz transakcji StoreKit, Apple trzyma ją w kolejce i dostarcza ponownie za każdym razem, gdy twoja aplikacja się uruchamia lub podłącza się obserwator, więc dostajesz kolejną szansę na przyznanie uprawnienia. Apple nie zwraca pieniędzy za niezakończoną transakcję. W App Store nie ma automatycznego trzydniowego zwrotu.

Model myślowy musi więc pozostać specyficzny dla platformy. W Google Play nieobsłużony zakup to zwrot, który czeka, by się wydarzyć, i termin, z którym się ścigasz. W App Store nieobsłużony zakup to ponowna dostawa, która czeka, by się wydarzyć, i żaden zegar. Przeniesienie założenia z Apple na Androida to sposób, w jaki zespoły kończą ze ścianą niepotwierdzonych zwrotów, których nie potrafią wyjaśnić.

Dlatego RefundHalt potwierdza zakupy w Google Play automatycznie w chwili, gdy nadchodzi powiadomienie ze sklepu, i uzgadnia z Voided Purchases API, aby uprawnienie przyznane za zakup, który Google później cofnęło, nie pozostawało aktywne. Zasada trzech dni przestaje być wyścigiem, który możesz przegrać, i staje się krokiem, który już się wydarzył.

Często zadawane pytania

Dlaczego mój zakup w Google Play został automatycznie zwrócony po trzech dniach?
Ponieważ twoja aplikacja nie potwierdziła go na czas. Google Play automatycznie zwraca pieniądze kupującemu i unieważnia każdy zakup, który nie zostanie potwierdzony w ciągu trzech dni od osiągnięcia stanu PURCHASED. To nie jest prośba klienta ani kara od Google, to brakujące wywołanie potwierdzenia, a potwierdzanie po stronie serwera na podstawie powiadomienia ze sklepu je eliminuje.
Jaka jest różnica między potwierdzeniem a skonsumowaniem zakupu?
Oba spełniają wymóg trzech dni. Produkt jednorazowy konsumujesz, przez purchases.products.consume lub consumeAsync(), co również sprawia, że produkt znów da się kupić. Produkt wielorazowy lub subskrypcję potwierdzasz, przez purchases.products.acknowledge, purchases.subscriptions.acknowledge lub acknowledgePurchase(), co potwierdza uprawnienie bez uwalniania produktu do ponownego zakupu.
Czy muszę potwierdzać odnowienia subskrypcji w Google Play?
Nie. Potwierdzenia wymaga tylko pierwszy zakup subskrypcji. Google nie wymaga potwierdzania odnowień i oznacza je automatycznie jako ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED. Nowy zakup przychodzi jako ACKNOWLEDGEMENT_STATE_PENDING i pozostaje twoją odpowiedzialnością, dopóki go nie rozliczysz.
Czy mogę potwierdzić zakup, gdy jest jeszcze w stanie PENDING?
Nie. Powinieneś potwierdzać tylko wtedy, gdy stan zakupu to PURCHASED. Zakup PENDING, taki jak płatność gotówkowa lub prośba o zatwierdzenie przez rodzica, nie uruchomił jeszcze trzydniowego zegara. Przyznaj uprawnienie i potwierdź dopiero po przejściu stanu z PENDING do PURCHASED.
Czy Apple zwraca pieniądze za zakupy, których nie zakończę?
Nie. StoreKit od Apple dostarcza niezakończoną transakcję ponownie za każdym razem, gdy twoja aplikacja się uruchamia, dopóki jej nie zakończysz, ale nigdy nie zwraca za nią pieniędzy automatycznie. Automatyczny trzydniowy zwrot za niepotwierdzone zakupy jest właściwy tylko dla Google Play, więc obie platformy wymagają odmiennej obsługi.
Jak się ratować, jeśli zakup został już zwrócony z powodu braku potwierdzenia?
Nie możesz cofnąć zwrotu, ale możesz uzgodnić. Odpytaj Voided Purchases API, które wymienia zwrócone i unieważnione zakupy z ostatnich 30 dni i oznacza te unieważnione, ponieważ nigdy nie zostały potwierdzone, a następnie cofnij uprawnienie, które przyznałeś. W przyszłości potwierdzaj na podstawie powiadomienia ze sklepu, aby następny się nie prześlizgnął.

Źródła i materiały dodatkowe

RefundHalt

Autopilot zwrotów dla App Store i Google Play

Czytaj dalej

Kolejny wniosek o zwrot jest już w drodze.

Skonfiguruj RefundHalt w czasie potrzebnym na przeczytanie kolejnej wiadomości od pomocy technicznej o zwrocie, którego nie udało Ci się zakwestionować.