Guideline 3.1.2: odrzucona aplikacja przez subskrypcję
Autor: Mehdi Azizi
Opublikowano , 9 min
Guideline 3.1.2: pobierana kwota musi być najlepiej widoczną ceną paywalla, obok okresu, odnawiania i linków do regulaminu. Dwa prawdziwe odrzucenia i poprawki.
Guideline 3.1.2 reguluje subskrypcje odnawiane automatycznie. Jeśli Apple ją cytuje, sprawdź dwie rzeczy: kwota faktycznie pobierana musi być najlepiej widoczną ceną na twoim paywallu, a aplikacja i jej strona w sklepie muszą podawać okres, cenę i działające linki do regulaminu oraz polityki prywatności.
Dostałem to odrzucenie w dwóch swoich aplikacjach w październiku 2026: Solys 10-go, TradaZen 12-go. Problem był ten sam: cena tygodniowa dużą czcionką, a prawdziwa pobierana kwota małą. Poniżej treść reguły, te dwa przypadki i checklista, którą teraz stosuję. Inne powody odrzuceń znajdziesz w tekście dlaczego Apple odrzuca aplikację.
Co mówi guideline 3.1.2?
Reguła 3.1.2, „Subscriptions”, jest w sekcji 3 „Business” dokumentu App Review Guidelines, w części 3.1 „Payments”. Stąd tytuł maila: „Guideline 3.1.2 - Business - Payments - Subscriptions”. Ma trzy punkty, a litera w nawiasie mówi ci, gdzie szukać.
| Punkt | Czego wymaga Apple | Typowe odrzucenie |
|---|---|---|
| 3.1.2(a) Permissible uses | Ciągła wartość, minimum 7 dni | Subskrypcja bez rozwijającej się treści |
| 3.1.2(b) Upgrades and Downgrades | Zmiana planu bez dublowania | Dwa plany opłacane jednocześnie |
| 3.1.2(c) Subscription Information | Co użytkownik dostaje i za jaką cenę | Cena przeliczona większa niż pobierana |
Tekst 3.1.2(c) jest krótki. Zanim poprosisz kogoś o subskrypcję, musisz „clearly describe what the user will get for the price”, czyli jasno opisać, co dostaje za tę cenę. Dalej odsyła do załącznika 2 (Schedule 2) umowy licencyjnej programu deweloperskiego. Ten załącznik wymienia, co musisz pokazać „clearly and conspicuously”, czyli jasno i widocznie:
- nazwę subskrypcji;
- jej okres;
- jej cenę, a także cenę za jednostkę, jeśli ma to sens;
- linki do polityki prywatności i regulaminu, dostępne w aplikacji.
Reguła o wielkości cen jest na stronie Apple poświęconej subskrypcjom. W ścieżce zakupu „the amount that will be billed must be the most prominent pricing element in the layout”: kwota, która zostanie pobrana, musi być najbardziej widocznym elementem cenowym. Odpowiednik miesięczny albo oszczędność są dozwolone, pod warunkiem że są na drugim planie i mniejsze. Ta sama strona wymaga, by przy darmowym okresie próbnym podać jego długość i cenę pobieraną po jego końcu.
Dwa odrzucenia 3.1.2(c), które dostałem
Solys: 0,38 € dużo, 19,99 € mało
Solys to mój budzik, który usypia twoje social media. Na paywallu w onboardingu karta „Roczny” pokazywała „0,38 €/tydz.” w 21 punktach, pogrubione. Pod spodem, w 15 punktach: „czyli 19,99 €/rok”. A pobierane jest 19,99 €, nie 0,38 €.
10 października 2026 Apple odrzuca wersję, cytując 3.1.2(c). Wiadomość wymaga, by pobierana kwota była najjaśniejszym i najbardziej widocznym elementem cenowym. Darmowy okres próbny, cena startowa i ceny przeliczone muszą być jej podporządkowane. Apple wymienia swoje kryteria: czcionkę, rozmiar, kolor i położenie.
Zostawiłem ten układ świadomie: wcześniejsza wersja TradaZen, zbudowana na tej samej zasadzie, została zaakceptowana. To był zakład i kosztował mnie jeden cykl review.
Poprawka: „19,99 €/rok” dużo, „czyli 0,38 €/tydz.” jako szary podpis pod spodem, we wszystkich 30 językach aplikacji. Paywall jest w kodzie, więc przed ponownym wysłaniem wersji potrzebny był nowy build.
TradaZen: ten sam powód, dwa dni później
TradaZen to mój symulator tradingu. 12 października 2026 wersja 1.5.1 zostaje odrzucona z tej samej reguły. Wiadomość mówi o cenie „weekly calculated” pokazanej „more clearly and conspicuously than the billed amount”: tygodniowy odpowiednik był bardziej widoczny niż pobierana kwota.
Moja pierwsza poprawka nie wystarczyła i zauważyłem to przed wysłaniem. Zmniejszyłem „0,92 €/tydz.”, ale zostawiłem je po prawej, w linii ceny. Tymczasem karta subskrypcji tygodniowej pokazywała w tej samej kolumnie swoją prawdziwą cenę: „8,99 €/tydz.”. Obie kwoty czytało się na tym samym poziomie. Cena przeliczona umieszczona w kolumnie prawdziwych cen czyta się jak cena pobierana, nawet jeśli jest mała.
Ostateczna poprawka: każda karta ma swoją pobieraną kwotę dużą czcionką, po prawej. Cena tygodniowa trafia do szarego podpisu pod spodem. Po lewej tylko nazwa planu. Przy kolejnym review Apple nie zgłosił już 3.1.2(c).
Pozostałe lekcje z tej aplikacji są w studium przypadku TradaZen.
Co Apple odrzucił, a co przeszło
Oto prawdziwe układy, po kolei, z wynikiem.
| Sposób pokazania ceny | Wynik |
|---|---|
| TradaZen, wcześniejsza wersja: cena tygodniowa na pierwszym planie | Zaakceptowane we wcześniejszym review |
| Solys: „0,38 €/tydz.” pogrubione, „19,99 €/rok” pod spodem | Odrzucone 10.10.2026, 3.1.2(c) |
| TradaZen 1.5.1: cena tygodniowa bardziej widoczna niż pobierana | Odrzucone 12.10.2026, 3.1.2(c) |
| TradaZen: cena tygodniowa zmniejszona, ale w kolumnie cen | Odrzucone przeze mnie przed wysłaniem |
| TradaZen: pobierana duża po prawej, tygodniowa w podpisie | Niezgłoszone w kolejnym review |
| Solys: „19,99 €/rok” dużo, cena tygodniowa w szarym podpisie | Poprawione i ponownie wysłane do Apple |
Najważniejszy jest pierwszy wiersz. Zaakceptowane review nie zatwierdza twojego paywalla na następne. Każda wersja trafia znów do recenzenta, który może czytać regułę surowiej niż poprzedni. Jedyny bezpieczny układ to ten, który trzyma się tekstu.
Pobierana kwota to jedyna duża cena. Każdy odpowiednik, tygodniowy, miesięczny czy dzienny, to mniejszy i bledszy podpis, nigdy na jej miejscu.
Checklista paywalla zgodnego z 3.1.2
Tę listę przechodzę teraz na każdym paywallu w moich aplikacjach, przed każdym wysłaniem:
- Na każdej karcie pobierana kwota jest największą, najbardziej kontrastową i najlepiej umieszczoną ceną.
- Każda cena przeliczona (tygodniowa, miesięczna, dzienna) jest podpisem, mniejszym i bledszym, pod pobieraną kwotą.
- Żadna cena przeliczona nie zajmuje kolumny, w której inny plan pokazuje swoją prawdziwą cenę.
- Okres jest napisany wprost: „rocznie”, „tygodniowo”.
- Darmowy okres próbny podaje swoją długość i kwotę pobieraną po jego końcu.
- Jedno zdanie mówi, że subskrypcja odnawia się automatycznie i można ją anulować w ustawieniach konta Apple.
- To, co odblokowuje subskrypcja, jest napisane przed przyciskiem zakupu.
- Przycisk „Restore Purchases” jest widoczny na paywallu.
- Linki do regulaminu i polityki prywatności są na paywallu i się otwierają.
- Jeśli oferujesz kilka planów, są w jednej grupie subskrypcji, tak jak radzi Apple.
- Wygląd jest sprawdzony na najmniejszym iPhonie i z najdłuższą ceną. W TradaZen testuję cenę w wietnamskich dongach: kwota, która łamie się do nowej linii, psuje hierarchię.
Jeśli używasz paywalli RevenueCat, dokumentacja RevenueCat ostrzega przed tym samym: sama zmienna z ceną miesięczną nie wystarczy, jeśli pobierana kwota i jej okres nie pojawiają się gdzie indziej. Pełną integrację opisuję w RevenueCat: wdrożenie subskrypcji in-app, a błędy projektowe w paywall iOS: 7 błędów początkujących.
Linki do regulaminu i prywatności: w aplikacji i na stronie w sklepie
Druga postać odrzucenia 3.1.2 nie dotyczy paywalla, tylko metadanych. Wiadomości publikowane przez deweloperów na forach Apple precyzują oczekiwane miejsce: link do polityki prywatności w przeznaczonym do tego polu App Store Connect, a link do regulaminu (EULA) w opisie lub w polu EULA.
Pułapka tkwi w standardowej umowie. Według pomocy App Store Connect, jeśli nie dodasz własnej umowy, obowiązuje standardowa umowa Apple i „the license agreement link isn't shown on your App Store product page”: na twojej stronie w sklepie nie pojawia się żaden link. Jeśli używasz standardowej umowy, sam musisz wstawić jej link do opisu, do swojej strony z regulaminem albo do standardowej umowy licencyjnej Apple.
W moich aplikacjach z subskrypcją kończę opis dwiema liniami, w każdym języku strony w sklepie. Oto wzór, dopasuj go do swojej oferty i domeny:
7 dni za darmo, potem subskrypcja roczna lub tygodniowa,
możliwa do anulowania w każdej chwili.
Regulamin: https://your-domain.com/terms
Prywatność: https://your-domain.com/privacy
Otwórz oba linki, zanim je wkleisz: strona, której nie ma, to tak jakby linku nie było. Co powinna zawierać polityka, opisuję w polityka prywatności aplikacji, a resztę strony w sklepie na stronie ASO App Store.
Ten punkt poprawisz bez nowego buildu: opis i pola App Store Connect to metadane.
3.1.2(a): subskrypcja musi dawać ciągłą wartość
Drugi punkt, przez który są odrzucenia, dotyczy modelu, a nie ekranu. 3.1.2(a) wymaga „ongoing value”: wartości, która trwa w czasie. Okres trwa co najmniej siedem dni, a subskrypcja działa na wszystkich urządzeniach użytkownika. Subskrybent dostaje to, za co zapłacił, bez dodatkowych zadań, takich jak publikowanie w social mediach.
Jeśli twoja aplikacja świadczy usługę raz na zawsze, jednorazowy zakup może pasować lepiej. Oba modele porównuję w subskrypcja czy jednorazowy zakup.
Co odpowiedzieć Apple po odrzuceniu 3.1.2
Rozmowa toczy się w sekcji App Review twojej aplikacji. Procedura, by odpowiedzieć App Review, jest taka sama jak przy innych regułach. Są dwa przypadki:
- Problem jest w aplikacji (wielkość cen, informacje na paywallu): potrzebny jest nowy build, tak jak w Solys i TradaZen. Recenzent testuje wbudowany kod, wyjaśniam to w poradniku o guideline 2.1.
- Problem jest na stronie w sklepie (brakujące lub martwe linki): poprawiasz metadane, odpowiadasz i to samo zgłoszenie rusza dalej.
Pisz po angielsku, rzeczowo: co było problemem, co się zmieniło, jak to sprawdzić. Oto wzór, którego używam (zamień numer buildu, ceny i ścieżkę na swoje):
Hello,
Thank you for your review.
Issue: on the paywall, the weekly equivalent price was displayed
more prominently than the billed amount.
Fix in build X:
- Each plan now shows its billed amount (e.g. "€19.99/year")
as the largest price on the card.
- The weekly equivalent is a smaller grey caption below it.
- The paywall states the duration, the auto-renewal, and links
to our Terms of Use and Privacy Policy.
How to verify: launch the app and complete the onboarding.
The paywall appears at the end.
Best regards,
Popraw swój paywall przed kolejnym wysłaniem
Jeśli twoja aplikacja właśnie została odrzucona z 3.1.2, Apple Review Kit pomoże ci znaleźć cytowaną regułę, zrozumieć, czego wymaga, i da przykład poprawki oraz odpowiedzi. Jego skille do Claude Code sprawdzają też twój paywall i stronę w sklepie przed wysłaniem. Jeśli chcesz, żeby spojrzał na to człowiek, zarezerwuj godzinę ze mną: przeczytamy wiadomość od Apple i przerobimy twój paywall na twoim ekranie. Cały proces opisuję na stronie aplikacja odrzucona przez Apple, a wdrożenie subskrypcji na stronie subskrypcja in-app iOS.
Jeśli przygotowujesz swoje pierwsze wydanie, zrób darmową diagnozę: ułoży kroki we właściwej kolejności i wyśle ci moją checklistę przeciw odrzuceniom Apple. Jeśli chcesz stworzyć aplikację mobilną, która zarabia od premiery, iOS Kit poświęca swój trzeci etap, „podłączenie pieniędzy”, subskrypcji i paywallowi.
Nikt nie zagwarantuje, że Apple zaakceptuje twoją aplikację. Mogę za to oszczędzić ci odrzucenia 3.1.2(c), za które ja zapłaciłem dwa razy.
Najczęściej zadawane pytania
Co oznacza „Guideline 3.1.2 - Business - Payments - Subscriptions”?
To pełna nazwa reguły o subskrypcjach. Sygnalizuje źle uporządkowaną cenę, brakującą informację na paywallu, brak linku na stronie w sklepie albo subskrypcję bez ciągłej wartości. Litera w nawiasie, na przykład 3.1.2(c), wskazuje, o który punkt chodzi.
Czy można jeszcze pokazywać cenę tygodniową lub miesięczną?
Tak. Apple pozwala na odpowiednik tygodniowy lub miesięczny albo na oszczędność, pod warunkiem że są mniejsze i mniej widoczne niż faktycznie pobierana kwota. W moich aplikacjach odpowiednik to szary podpis pod pobieraną ceną, nigdy w kolumnie prawdziwych cen.
Czy po odrzuceniu 3.1.2 potrzebny jest nowy build?
Tak, jeśli problem jest na paywallu, bo recenzent testuje wbudowany kod. Nie, jeśli jest na stronie w sklepie, na przykład brak linku w opisie: poprawiasz metadane i to samo zgłoszenie rusza dalej.
Gdzie umieścić link do regulaminu (EULA)?
W aplikacji, na paywallu. Na stronie w sklepie: w opisie albo w polu EULA w App Store Connect, jeśli masz własną umowę. Przy standardowej umowie Apple na twojej stronie nie pojawia się żaden link: dodaj go sam do opisu, w każdym języku.
Mój paywall był już zaakceptowany, dlaczego teraz jest odrzucany?
Bo każda wersja przechodzi review od nowa, czasem u innego recenzenta. Cena tygodniowa na pierwszym planie została zaakceptowana w TradaZen, a potem odrzucona w Solys i w TradaZen w październiku 2026. Chroni cię tylko tekst reguły.