Wszystkie artykuły
Deep dive8 min czytania

Zwrot za płatną aplikację nigdy nie trafia na twój serwer, więc musi go wykryć sama aplikacja

Zwroty za aplikacje płatne z góry omijają wszystkie powiadomienia, których nasłuchuje twój serwer. Google daje kupującym dwie godziny na zwrot i odinstalowuje aplikację, Apple może zwrócić pieniądze w ciągu 90 dni na mocy twojej umowy, a żaden z nich nie prosi o dowody. Oto co mówi każdy sklep, ile to kosztuje i jak to sprawdzić w aplikacji.

Smartfon na drewnianym biurku obok podartego paragonu ze sklepu i kilku monet, ilustracja zwrotu za płatną aplikację

Najważniejsze wnioski

  • Zwrot za płatną aplikację dotyczy ceny samego pobrania aplikacji, a nie zakupu w aplikacji, i ani Apple, ani Google nie dokumentuje dla niego powiadomienia serwerowego.
  • Według pomocy Play Console Google kupujący ma do dwóch godzin od zakupu płatnej aplikacji, aby ją zwrócić z pełnym zwrotem pieniędzy, i może zwrócić daną aplikację tylko raz.
  • Zasady zwrotów Google Play mówią, że aplikacja jest odinstalowywana w ramach zwrotu, a kupujący, który kupi tę samą aplikację ponownie, nie dostanie drugiego zwrotu.
  • Typ REFUND w App Store Server Notifications V2 od Apple obejmuje produkty konsumpcyjne, niekonsumpcyjne, subskrypcje odnawiane automatycznie i subskrypcje nieodnawialne. Zakupu aplikacji nie ma na tej liście.
  • Apple Developer Program License Agreement, Schedule 2 punkt 6.3, pozwala Apple zwrócić pieniądze kupującemu, który zrezygnuje w ciągu 90 dni od pobrania, a deweloper zwraca Apple tę kwotę.
  • Dokumentacja StoreKit od Apple wymienia revocationDate w AppTransaction, podpisanym zapisie zakupu aplikacji, który aplikacja może sprawdzić na urządzeniu.
  • Ani CONSUMPTION_REQUEST, ani orders.reviewrefund z Google Play nie są udokumentowane dla zakupów pobrania aplikacji, więc o zwrocie za płatną aplikację decyduje się bez dowodów dewelopera.

Aplikacje płatne z góry są zwracane bocznymi drzwiami, których większość narzędzi do obsługi zwrotów nigdy nie pilnuje. Gdy kupujący zwraca samą aplikację, a nie coś kupionego w jej wnętrzu, Apple i Google odbierają pieniądze z twojej wypłaty, nie wysyłając twojemu serwerowi ani jednego powiadomienia. Google przynajmniej odinstalowuje aplikację. W przypadku iOS deweloperzy na forach samego Apple piszą, że kupujący po zwrocie dalej z niej korzystają. Jeśli sprzedajesz płatną aplikację, zwrot za nią to jedyny zwrot, który zobaczysz wyłącznie jako ujemną pozycję w raporcie, chyba że aplikacja sprawdzi go na urządzeniu.

Zasady zwrotów za płatne aplikacje w Google Play i App Store

Oba sklepy traktują zakup pobrania jako osobny produkt z własnymi zasadami. Oto co mówi dokumentacja każdego z nich.

ZasadaGoogle PlayApp Store
Szybki zwrot samodzielnyDo dwóch godzin od zakupu, pełny zwrotBrak w dokumentacji
Dłuższe okno na wniosekKupujący może złożyć wniosek w ciągu 48 godzin, potem kontaktuje się z deweloperemApple może zwrócić pieniądze w ciągu 90 dni od pobrania, na mocy Schedule 2 umowy deweloperskiej
Ile razyRaz na aplikację. Ponownego zakupu nie można znowu zwrócićBrak w dokumentacji
Co dzieje się z aplikacjąOdinstalowana w ramach zwrotuBrak w dokumentacji. Deweloperzy piszą, że kupujący zachowują dostęp po zwrocie
Deweloper może zwrócić pieniądzeTak, tylko pełne zwroty, w Play ConsoleNie
Powiadomienie serwerowe do ciebieBrak w dokumentacjiBrak w dokumentacji
Prośba o dowody do ciebieBrak w dokumentacjiBrak w dokumentacji

Jak działa dwugodzinny zwrot w Google Play

Pomoc Play Console Google mówi to wprost: po zakupie płatnej aplikacji użytkownik ma do dwóch godzin, aby ją zwrócić z pełnym zwrotem pieniędzy, i może zwrócić aplikację tylko raz. Zasady zwrotów dla konsumentów dodają, że w ciągu 48 godzin kupujący może dostać zwrot w zależności od zakupu, że aplikacja jest odinstalowywana w ramach zwrotu i że osoba, która kupi tę samą aplikację ponownie, nie dostanie za nią zwrotu. Po 48 godzinach Google odsyła kupujących do dewelopera.

Jak Apple zwraca pieniądze za płatną aplikację

W App Store kupujący zgłasza się do Apple przez reportaproblem.apple.com, wybiera powód i zaznacza aplikację. Apple zapowiada odpowiedź w ciągu 24 do 48 godzin. Nie możesz sam zwrócić pieniędzy za zakup w App Store. Granicę zewnętrzną wyznacza twoja umowa. Punkt 6.3 Schedule 2 umowy Apple Developer Program License Agreement stanowi, że jeśli kupujący chce zrezygnować w ciągu dziewięćdziesięciu dni od pobrania albo aplikacja nie jest zgodna z twoją specyfikacją lub obowiązującym prawem, Apple może zwrócić pełną cenę, a ty zwracasz Apple tę kwotę lub przyznajesz mu kredyt w tej wysokości.

Dlaczego twój serwer nigdy nie dowiaduje się o zwrocie za płatną aplikację

Każdy sygnał zwrotu, który wysyłają oba sklepy, jest zbudowany z myślą o zakupach w aplikacji. Apple opisuje swój notificationType jako zdarzenie zakupu w aplikacji lub zakupu zewnętrznego, które wywołało powiadomienie. Jego typ REFUND obejmuje produkt konsumpcyjny, produkt niekonsumpcyjny, subskrypcję odnawianą automatycznie lub subskrypcję nieodnawialną. Get Refund History zwraca zwrócone zakupy klienta w aplikacji. Pobrania aplikacji nie ma na żadnej z tych list.

W Google jest tak samo. Powiadomienia dla deweloperów w czasie rzeczywistym obejmują subskrypcje, produkty jednorazowe i anulowane zakupy, a productType anulowanego zakupu to subskrypcja albo zakup jednorazowy. Voided Purchases API według własnej dokumentacji dotyczy jednorazowych zamówień w aplikacji i subskrypcji, a sięga wstecz tylko 30 dni.

Czy zwrot za płatną aplikację wywołuje CONSUMPTION_REQUEST?

Nie. Według dokumentacji Apple CONSUMPTION_REQUEST jest wysyłany, gdy klient prosi o zwrot za konsumpcyjny zakup w aplikacji lub subskrypcję odnawianą automatycznie. To jeden z zaledwie dwóch procesów zwrotu w obu sklepach, które proszą dewelopera o dowody. Drugi to weryfikacja chargebacku w Google Play, na którą odpowiada się przez orders.reviewrefund w ciągu 24 godzin, i trafia ona tym samym strumieniem powiadomień o zakupach w aplikacji. Żaden z nich nie jest udokumentowany dla pobrań aplikacji. O zwrocie za płatną aplikację decyduje się bez niczego, co mógłbyś przesłać.

Czy kupujący po zwrocie dalej korzysta z aplikacji?

W Google Play zasady mówią, że aplikacja jest odinstalowywana. W przypadku iOS na forach Apple są wątki deweloperów, którzy pytają właśnie o to. Jeden z marca 2025 brzmi: „Gdy użytkownik zwraca aplikację płatną z góry, nadal ma do niej dostęp.” Inny, z 2022 roku, podejrzewa kupujących o to, że kupują, instalują, zwracają i korzystają dalej. Trzeci, z czerwca 2025, pyta, czy App Store Server Notifications V2 w ogóle zgłaszają zwroty na poziomie aplikacji. Żaden z trzech nie ma odpowiedzi od Apple.

Ile pieniędzy kosztuje cię zwrot za płatną aplikację

Strona wypłat jest przewidywalna. Według pomocy Play Console Google oddaje swoją opłatę serwisową, gdy zwracasz pieniądze, więc z wypłaty potrącany jest twój udział, a nie cena katalogowa. Zwrot dokonany po tym, jak Google ci zapłacił, jest potrącany z przyszłej wypłaty, a jeśli twoje saldo pozostaje ujemne przez co najmniej 48 godzin, Google może obciążyć twoje konto bankowe. Po stronie Apple umowa mówi, że zwracasz kwotę równą cenie. W praktyce RevenueCat podał w 2022 roku, że Apple potrącił kwotę po prowizji, widoczną jako Extended Partner Share, więc Apple nie zatrzymał swojej części.

Koszty, które nie wracają, to te, które poniosłeś, żeby obsłużyć tego kupującego. Oto przykład poglądowy. Płatna aplikacja do zdjęć za $6.99 uruchamia filtry przez model w chmurze i synchronizuje projekty z magazynem w chmurze. Zapłaciłeś za reklamę, która przyprowadziła kupującego.

Pozycja kosztówZwracana w Google PlayZwracana w App Store
Twój udział w $6.99Odebrany z twojej wypłatyOdebrany z twojej wypłaty
Opłata serwisowa lub prowizja sklepuZwracana ci przez GoogleNie naliczana, według raportu RevenueCat
Już wykorzystane inferencje w chmurze i wywołania APINieNie
Magazyn na zsynchronizowane projektyNieNie
Wydatki na reklamę, by pozyskać kupującegoNieNie
Bieżące koszty serwera, jeśli kupujący dalej używa aplikacjiKończą się, aplikacja jest odinstalowanaTrwają, dopóki twoja aplikacja nie sprawdzi

Ten ostatni wiersz to miejsce, w którym iOS robi się drogi. Kupujący po zwrocie, który zachowuje aplikację, dalej wywołuje twój backend, a każde zapytanie inferencji, synchronizacja i wywołanie API po zwrocie to koszt bez przychodu. W płatnej aplikacji bez kosztów serwera zwrot to utracona sprzedaż. W aplikacji z backendem może zamienić się w rosnący rachunek.

Jak wykryć zwrot za płatną aplikację w samej aplikacji

Skoro serwer niczego nie słyszy, sprawdzenie musi zacząć się na urządzeniu, a potem poinformować twój serwer.

W iOS odczytaj revocationDate z AppTransaction

AppTransaction to podpisany przez App Store zapis zakupu aplikacji przez klienta. Dokumentacja StoreKit od Apple wymienia w nim teraz właściwość revocationDate, opisaną jako data unieważnienia zakupu aplikacji. Odczytaj AppTransaction.shared przy uruchomieniu, zweryfikuj wynik i traktuj revocationDate różne od nil jako zwrócone pobranie. Wyślij podpisaną wartość na swój serwer, żeby przestał obsługiwać to konto.

  • appTransactionID pozostaje taki sam dla danego Apple Account nawet po zwrocie lub ponownym zakupie, mówi Apple, więc powiąż z nim swoje rekordy, a kupujący, który zapłaci ponownie, zostanie rozpoznany.
  • AppTransaction.refresh() pobiera świeży zapis z App Store, ale wyświetla prośbę o zalogowanie. Apple zaleca wywoływać go tylko po wyraźnej akcji użytkownika, na przykład dotknięciu przycisku przywracania zakupów.
  • Podpisana wartość znajduje się na urządzeniu. Dokumentacja Apple nie opisuje dla niej żadnego powiadomienia serwerowego, więc twój serwer wie tylko to, co zgłosi aplikacja.
Deweloper trzyma przed laptopem telefon z kłódką na ekranie i sprawdza dostęp po zwrocie za płatną aplikację

W Androidzie zapytaj Play Integrity o werdykt licencyjny

Odinstalowanie przez Google załatwia większość przypadków, ale kopia może je przetrwać, na przykład zainstalowana z kopii zapasowej przez sideloading. Play Integrity API zwraca appLicensingVerdict dla zalogowanego konta. LICENSED oznacza, że użytkownik ma uprawnienie do aplikacji. UNLICENSED oznacza, że go nie ma, a Google sugeruje pokazanie okna GET_LICENSED. UNEVALUATED oznacza, że Google nie mogło tego sprawdzić, na przykład dlatego, że użytkownik nie jest zalogowany w Google Play. Google zaznacza też, że na niektórych starszych urządzeniach użytkownik zachowuje uprawnienie po odinstalowaniu, więc LICENSED nie jest na każdym urządzeniu dowodem ważnego zakupu.

Niech serwer będzie strażnikiem

Sprawdzenia po stronie klienta można wyciąć łatką. Warto chronić płatną pracę, którą wykonuje twój backend, więc niech backend odrzuca wywołania z konta, którego ostatnie zgłoszenie to zwrot, werdykt UNLICENSED albo brak jakiegokolwiek werdyktu po wybranym przez ciebie okresie karencji. To właśnie powstrzymuje zwrot przed zamianą w darmową moc obliczeniową.

Kiedy płatna aplikacja powinna przejść na zakupy w aplikacji

Własne wytyczne Apple dotyczące zmiany modelu biznesowego opisują przejście z płatnej aplikacji na darmową aplikację z zakupami w aplikacji i użycie originalAppVersion w AppTransaction, by nadal dawać funkcje premium osobom, które kupiły wersję płatną. Korzyść z tego kroku przy zwrotach jest konkretna. Gdy cena siedzi w produkcie niekonsumpcyjnym lub subskrypcji, zwroty przychodzą jako powiadomienia REFUND i anulowane zakupy, na które twój serwer może zareagować, a wniosek o zwrot za subskrypcję w App Store wywołuje CONSUMPTION_REQUEST. To są sygnały, których nasłuchuje RefundHalt i na które odpowiada w oknach 12-godzinnym i 24-godzinnym. Płatne pobranie nie daje ci żadnego z nich.

Często zadawane pytania

Ile czasu ma kupujący na zwrot płatnej aplikacji w Google Play?
Do dwóch godzin od zakupu na pełny zwrot, według pomocy Play Console Google, i tylko raz na aplikację. Zasady zwrotów Google mówią też, że kupujący może dostać zwrot w ciągu 48 godzin, a potem Google odsyła go do dewelopera. Aplikacja jest odinstalowywana w ramach zwrotu.
Czy Apple powiadamia mój serwer, gdy ktoś zwraca moją płatną aplikację?
Żadne powiadomienie nie jest udokumentowane. App Store Server Notifications od Apple obejmują zdarzenia zakupów w aplikacji, a typ REFUND wymienia tylko produkty konsumpcyjne, niekonsumpcyjne oraz subskrypcje odnawiane automatycznie i nieodnawialne. Aplikacja może odczytać revocationDate z AppTransaction na urządzeniu i zgłosić go twojemu serwerowi.
Czy kupujący po zwrocie zachowuje dostęp do płatnej aplikacji na iOS?
Deweloperzy na forach Apple piszą, że tak, a dokumentacja Apple nie opisuje żadnego kroku, który usuwa aplikację po zwrocie. Sprawdzaj revocationDate w AppTransaction przy uruchomieniu i niech twój serwer przestanie obsługiwać konta, które zgłaszają zwrócone pobranie.
Czy mogę sam zwrócić pieniądze za płatną aplikację?
W Google Play tak. Play Console pozwala wystawiać pełne zwroty za płatne aplikacje, nigdy częściowe, a Google oddaje swoją opłatę serwisową. W App Store nie. Tylko Apple może zwrócić pieniądze za zakup w App Store.
Czy mogę zakwestionować zwrot za płatną aplikację, pokazując dane o użyciu?
Nie. CONSUMPTION_REQUEST od Apple jest udokumentowany dla produktów konsumpcyjnych i subskrypcji odnawianych automatycznie, a weryfikacja chargebacku w Google Play przez orders.reviewrefund przychodzi powiadomieniami zbudowanymi dla produktów w aplikacji i subskrypcji. Żaden sklep nie dokumentuje procesu dowodowego dla samego zakupu aplikacji.

Ź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ć.