Zwrot pieniędzy w App Store: co widzi deweloper
Autor: Mehdi Azizi
Opublikowano , 8 min
O zwrocie w App Store decyduje tylko Apple. Deweloper dostaje CONSUMPTION_REQUEST, może odpowiedzieć w 12 h, a o decyzji dowiaduje się z REFUND.
W App Store to Apple przyznaje albo odrzuca zwrot pieniędzy, nigdy deweloper. Klient składa wniosek na stronie Apple albo z poziomu twojej aplikacji. Jeśli podłączyłeś powiadomienia serwerowe Apple, w momencie złożenia wniosku dostajesz powiadomienie CONSUMPTION_REQUEST, a po decyzji REFUND albo REFUND_DECLINED. Pomiędzy nimi masz 12 godzin na wysłanie danych o wykorzystaniu i swojej preferencji, pod warunkiem że klient się na to zgodził.
Przyznany zwrot usuwa zakup z aktywnych uprawnień klienta i pojawia się na minusie w twoich raportach sprzedaży. Ten poradnik opisuje każdy krok, to, co możesz wysłać do Apple, i to, co wolno ci zrobić przeciw nadużyciom. Zasady pochodzą ze stron Apple sprawdzonych 3 listopada 2026. Prawdziwy przypadek pochodzi z alertu, który podłączyłem do moich aplikacji w październiku.
Kto decyduje o zwrocie w App Store?
Apple i tylko Apple. Strona pomocy Apple opisuje ścieżkę klienta: loguje się na reportaproblem.apple.com, wybiera „Request a refund”, podaje powód, a potem wskazuje zakup. Apple radzi mu poczekać na odpowiedź 24 do 48 godzin.
Klient może też poprosić o zwrot z poziomu twojej aplikacji. StoreKit oferuje do tego arkusz wniosku, dostępny od iOS 15. Apple radzi wywoływać go z ustawień konta albo z menu pomocy. Arkusz pokazuje zakup i listę powodów, a Apple potrzebuje do 48 godzin na decyzję.
W obu przypadkach niczego nie zatwierdzasz. Możesz tylko przekazać informacje i preferencję, które są jednym z kilku kryteriów w decyzji Apple.
Co widzi każda ze stron, krok po kroku
| Etap | Po stronie klienta | Po stronie dewelopera |
|---|---|---|
| Wniosek | Formularz Apple albo arkusz w aplikacji | Powiadomienie CONSUMPTION_REQUEST |
| W ciągu 12 godzin | Czekanie | Możliwość wysłania danych o wykorzystaniu |
| W ciągu 48 godzin | Odpowiedź Apple | Powiadomienie REFUND albo REFUND_DECLINED |
| Po zgodzie | Pieniądze wracają na jego metodę płatności | Zakup usunięty z aktywnych uprawnień, ujemne jednostki |
| Po zakwestionowaniu | Zwrot anulowany przez Apple | Powiadomienie REFUND_REVERSED, dostęp do przywrócenia |
App Store Connect pokazuje ci tylko już przyznane zwroty, w Sales and Trends. Sam wniosek dociera wyłącznie przez powiadomienia serwerowe. Bez nich o zwrocie dowiadujesz się po fakcie.
Powiadomienia serwerowe przy zwrocie
App Store Server Notifications V2 wysyłają tu pięć przydatnych typów. Odbierasz je pod adresem HTTPS podanym w App Store Connect, jednym dla produkcji i jednym dla sandboxa.
| Powiadomienie | Co oznacza | Co robisz |
|---|---|---|
CONSUMPTION_REQUEST | Klient prosi o zwrot | Odpowiadasz w 12 godzin, jeśli jest zgoda |
REFUND | Apple zwróciło pieniądze za transakcję | Odbierasz zwróconą treść albo dostęp |
REFUND_DECLINED | Apple odrzuciło wniosek | Nic, dostęp trwa dalej |
REFUND_REVERSED | Apple anuluje zwrot po zakwestionowaniu przez klienta | Przywracasz to, co odebrałeś |
REVOKE | Zakup udostępniony w Chmurze rodzinnej nie jest już dostępny | Odbierasz dostęp członkowi rodziny |
Twój serwer musi odpowiedzieć kodem HTTP od 200 do 206. Według strony o odpowiadaniu na powiadomienia w przeciwnym razie Apple ponawia próbę pięć razy: 1, 12, 24, 48, a potem 72 godziny po poprzedniej próbie. W sandboxie wysyła tylko raz.
Consumption API: co możesz powiedzieć Apple
Gdy wniosek dotrze, możesz odpowiedzieć przez Send Consumption Information. Zasada mieści się w jednym zdaniu Apple: „Respond within 12 hours of receiving the CONSUMPTION_REQUEST notification.” Wersja 2 API obejmuje wszystkie typy produktów, łącznie z subskrypcjami.
Pola żądania:
| Pole | Wymagane | Co mówi Apple |
|---|---|---|
customerConsented | Tak | Klient zgodził się na udostępnienie swoich danych |
deliveryStatus | Tak | Zakup został dostarczony i działa albo dlaczego nie został |
sampleContentProvided | Tak | Przed zakupem był dostępny okres próbny, fragment albo opis |
consumptionPercentage | Nie | Wykorzystana część, od 0 do 100 000 dla 0 do 100% |
refundPreference | Nie | Twoja preferencja: DECLINE, GRANT_FULL albo GRANT_PRORATED |
Dwie rzeczy są ważne. Jeśli deliveryStatus nie ma wartości DELIVERED, wykorzystana część musi wynosić zero. A przy proporcjonalnym zwrocie za subskrypcję pomijasz wykorzystaną część: Apple oblicza ją samo.
Zgoda to warunek wszystkiego. Apple pisze: „You must obtain valid consent from the customer before sharing their personal data with Apple in the Send Consumption Information API.” Bez zgody nie odpowiadasz. Apple zabrania też używania okna śledzenia reklamowego do zbierania tej zgody: „Don't use the AppTrackingTransparency prompt to obtain consent”.
Jeśli korzystasz z RevenueCat
Z RevenueCat to on odbiera powiadomienia Apple i odpowiada na wniosek, przez Refund Control. Wybierasz jedną z czterech polityk: preferuj pełny zwrot, preferuj odmowę, wysyłaj tylko dane o wykorzystaniu albo nie odpowiadaj.
Włączenie udostępniania danych oznacza potwierdzenie, że masz zgodę klientów. RevenueCat sam to pisze: „Enabling consumption data sharing confirms that you obtained consent from your Customers.” Radzi też, żeby „Prefer no refund” stosować tylko do wybranej grupy, i ostrzega, gdy ta preferencja dotyczy większości twoich klientów.
Żeby dostawać powiadomienia także na własny serwer, RevenueCat oferuje w ustawieniach aplikacji pole „Apple Server Notification Forwarding URL”. Jest opisane na jego stronie o powiadomieniach Apple. Ja z tego korzystam. Konfiguracja subskrypcji z RevenueCat jest w RevenueCat i subskrypcja in-app na iOS.
Wpływ na przychody i subskrypcję
Na dostęp. Według dokumentacji currentEntitlements „Products that the App Store has refunded or revoked don't appear in the current entitlements”. Jeśli twoja aplikacja sprawdza uprawnienia przez currentEntitlements, zwrócony dostęp znika sam. Transakcja zawiera datę i powód odebrania w revocationDate i revocationReason.
Na raporty. Według pomocy do raportu sprzedaży zwrot pojawia się z ujemnymi jednostkami i ujemną ceną dla klienta. W przypadku subskrypcji strona o danych subskrypcji liczy pełne i częściowe zwroty jako zdarzenia i odejmuje je od dziennych jednostek.
Na reputację. Wytyczna 5.6.4 wymienia nadmierną liczbę wniosków o zwrot wśród oznak niewystarczającej jakości. Wysoki odsetek zwrotów to nie tylko strata pieniędzy: Apple może go wziąć pod uwagę, oceniając, czy przestrzegasz kodeksu postępowania.
Mój przypadek: alert podłączony do moich aplikacji
12 października 2026 podłączyłem alert do moich aplikacji. RevenueCat przekazuje powiadomienia Apple do endpointu na devoria.fr. Ten weryfikuje podpis Apple, a potem wysyła mi alert, bez kwoty. Chciałem widzieć wniosek w chwili, gdy przychodzi, a nie tylko wynik.
18 października przyszedł pierwszy prawdziwy wniosek, w TradaZen, moim symulatorze tradingu. Subskrypcja roczna, opłacona po zakończeniu 7-dniowego darmowego okresu próbnego. Podany powód: niezamierzony zakup. Trzy lekcje:
- Ten sam wniosek może przyjść kilka razy. Tego samego wieczoru dostałem ten sam alert trzy razy. Od tamtej pory każdy alert jest deduplikowany po typie powiadomienia i identyfikatorze transakcji.
- Decyzja przyszła w mniej niż dobę. Apple odmówiło około 22 godzin po wniosku. Klient zachował dostęp.
- Odmowa to nie koniec. Ten sam klient złożył nowy wniosek dwa dni później, dotyczący tej samej transakcji.
Wniosku z powodu „niezamierzonego zakupu” na koniec okresu próbnego nie wygrywa się odpowiedzią do Apple. Zapobiega mu się na paywallu, przed pierwszą płatnością.
Jak ograniczyć nadużycia bez łamania zasad
Co wolno:
- Odpowiadać na każdy wniosek prawdziwymi danymi, gdy klient wyraził zgodę.
- Wyrażać preferencję celowo, na przykład odmowę dla już wykorzystanego zakupu, zamiast odmowy dla wszystkich.
- Łączyć każdy
REFUNDz kontem klienta. Strona Apple o powiadomieniach o zwrotach zaleca to, żeby wychwytywać powtarzające się zwroty. - Jasno mówić przed zakupem, co się kupuje. Wytyczna 3.1.2(c) wymaga opisania, co użytkownik dostaje za tę cenę, zanim zaproponujesz mu subskrypcję.
Czego nie wolno:
- Wysyłać fałszywych danych, żeby wniosek został odrzucony, ani odpowiadać bez zgody.
- Zbierać zgody przez okno śledzenia reklamowego, co Apple wprost wyklucza.
- Zastawiać pułapek przy zakupie. Wytyczna 5.6 zabrania nakłaniania klientów do niechcianych zakupów i pobierania opłat za coś, co nie zostało dostarczone.
- Wywierać presji na klienta, który prosi o zwrot. Ta sama zasada wymaga szacunku w obsłudze klienta, bez zastraszania.
Najlepsza dźwignia działa wcześniej: paywall, który podaje cenę, datę pierwszej płatności i sposób anulowania. Błędy, których warto unikać, są w błędach na paywallu, a zasady okresu próbnego w darmowym okresie próbnym w App Store.
Testowanie przed produkcją
Według strony o testowaniu wniosków sandbox i testy StoreKit w Xcode obsługują wnioski o zwrot. W sandboxie dowolny powód skutkuje automatyczną zgodą. Żeby zasymulować odmowę, wybierz „Other” i wpisz DECLINE. Dla zwrotu proporcjonalnego wpisz GRANT_PRORATED. W sandboxie twoja odpowiedź z danymi o wykorzystaniu musi zostać wysłana w ciągu pięciu minut.
Subskrypcja, za którą rzadziej proszą o zwrot
iOS & Android Kit bazuje na kodzie moich aplikacji, z gotowym onboardingiem, paywallem i subskrypcjami, i prowadzi cię przez cztery etapy aż do App Store, w twoim tempie. Pełna konfiguracja jest opisana na stronie subskrypcja in-app na iOS, a zasady Apple dotyczące subskrypcji w wytycznej 3.1.2.
Zanim uruchomisz paywall, zrób darmową diagnozę: powie ci, co naprawdę blokuje twój projekt, i wyśle ci moją checklistę przeciw odrzuceniom przez Apple.
Najczęściej zadawane pytania
Czy deweloper może odmówić zwrotu w App Store?
Nie. Decyduje tylko Apple. Możesz wysłać dane o wykorzystaniu i preferencję, na przykład DECLINE, które są jednym z kilku kryteriów. Ostatnie słowo należy do Apple.
Czy deweloper dostaje informację o wniosku o zwrot?
Tak, jeśli podłączył App Store Server Notifications V2. Apple wysyła CONSUMPTION_REQUEST w chwili złożenia wniosku, a potem REFUND albo REFUND_DECLINED po decyzji. Bez powiadomień widzisz w raportach tylko przyznane zwroty.
Ile czasu Apple potrzebuje na rozpatrzenie wniosku o zwrot?
Apple podaje klientowi 24 do 48 godzin. Dokumentacja StoreKit mówi o maksymalnie 48 godzinach. Ty masz 12 godzin na wysłanie danych o wykorzystaniu.
Co dzieje się z dostępem po zwrocie?
Zwrócony zakup znika z aktywnych uprawnień klienta: StoreKit 2 nie zwraca go już w currentEntitlements. Jeśli Apple później anuluje zwrot, dostajesz REFUND_REVERSED i musisz przywrócić dostęp.
Czy potrzebuję zgody klienta, żeby odpowiedzieć Apple?
Tak. Apple wymaga ważnej zgody przed jakimkolwiek udostępnieniem danych przez Consumption API. Bez niej nie odpowiadasz na powiadomienie. Do jej zebrania nie można użyć okna śledzenia reklamowego.
Czy zwroty działają na niekorzyść mojej aplikacji?
Mogą. Wytyczna 5.6.4 wymienia nadmierną liczbę wniosków o zwrot wśród oznak niewystarczającej jakości, co Apple może wziąć pod uwagę, oceniając przestrzeganie kodeksu postępowania.

