# Retention Messaging API Apple: komunikat przed anulowaniem

> Retention Messaging API Apple pokazuje twój komunikat, gdy subskrybent stuknie Cancel Subscription. Formaty, warunki, dostęp i konfiguracja.

Oryginalna strona: [Retention Messaging API Apple: komunikat przed anulowaniem](https://devoria.fr/pl/blog/retention-messaging-api-apple-komunikat-anulowanie)
Autor: [Mehdi Azizi](https://devoria.fr/pl/mehdi-azizi)
Publikacja: 2026-11-04
Ostatnia aktualizacja treści: 2026-11-04


Retention Messaging API to usługa Apple typu serwer-serwer, która pokazuje twój komunikat subskrybentowi w chwili, gdy stuka Cancel Subscription. Komunikat pojawia się na ekranie potwierdzenia, zanim anulowanie zostanie zatwierdzone. **Może przypomnieć, co daje twoja subskrypcja, zaproponować inny plan albo ofertę promocyjną, ale przycisk anulowania zawsze zostaje na miejscu.** API jest w wersji preview od lipca 2025, dostęp przyznawany jest na wniosek, a Apple zapowiedział prostszą wersję w App Store Connect na jesień 2026.

Ten poradnik wyjaśnia, co API wyświetla, od kiedy istnieje, kto może z niego korzystać, jakie ma warunki i jak je skonfigurować. Wszystko pochodzi z dokumentacji Apple i z poświęconej mu sesji WWDC26, sprawdzonych 3 listopada 2026.

Sprzedaję subskrypcje w moich aplikacjach iOS: Solys, blokerze mediów społecznościowych, TradaZen, symulatorze tradingu, Nolera, aplikacji do przymierzania ubrań z AI, oraz Vigie. 25 października 2026 złożyłem wniosek o dostęp do API dla wszystkich czterech i przygotowałem ich komunikaty we wszystkich językach. 28 października zgody Apple wciąż nie było, więc ten poradnik opisuje zasady i moje przygotowania, a nie wyniki.

## Co robi Retention Messaging API

Według [dokumentacji Apple](https://developer.apple.com/documentation/retentionmessaging) API pozwala ci wybrać komunikat, który system pokazuje, gdy klient ogląda szczegóły subskrypcji i być może zamierza ją anulować. Komunikaty przygotowujesz z wyprzedzeniem, dla każdego produktu i każdego języka.

Ścieżka jest zawsze taka sama:

1. Subskrybent otwiera swoją subskrypcję, na przykład w Apple Account, Subscriptions, albo z poziomu App Store.
2. Stuka Cancel Subscription.
3. System pokazuje ekran potwierdzenia (Confirm Cancellation) z twoim komunikatem.
4. Może mimo to anulować, zachować subskrypcję albo przyjąć to, co proponuje twój komunikat.

Komunikat jest widoczny na iOS 15.1 i iPadOS 15.1 lub nowszym, na visionOS 1 oraz na macOS 14 lub nowszym.

## Od kiedy i dla kogo

| Data          | Co się zmienia według Apple                                            |
| ------------- | ---------------------------------------------------------------------- |
| 16 lip 2025   | Wersja 1.0: pierwsza wersja preview API                                |
| 9 gru 2025    | Test wydajności serwera dla trybu czasu rzeczywistego                  |
| 31 mar 2026   | Punkty w komunikatach, ustawianie adresu czasu rzeczywistego przez API |
| 27 kwi 2026   | Obsługa subskrypcji miesięcznych z 12-miesięcznym zobowiązaniem        |
| Czerwiec 2026 | WWDC26: zapowiedź modułu w App Store Connect                           |

Daty pochodzą z [dziennika zmian API](https://developer.apple.com/documentation/retentionmessaging/retention-messaging-changelog), poza ostatnią, wziętą z sesji WWDC26. API nadal jest w wersji preview: dokumentacja odsyła do [formularza wniosku o dostęp](https://developer.apple.com/contact/request/retention-messaging-api/), który wymaga zalogowania na konto deweloperskie.

Na WWDC26 sesja [Explore Retention Messaging in App Store Connect](https://developer.apple.com/videos/play/wwdc2026/309/) przedstawia moduł konfigurowany bez kodu, w App Store Connect. Apple mówi, że jest „otwarty dla wszystkich”. Wersja czasu rzeczywistego nadal wymaga wniosku. [Strona nowości App Store](https://developer.apple.com/app-store/whats-new/) zapowiada moduł na „tę jesień”. **Na 3 listopada 2026 pomoc App Store Connect nie ma jeszcze o nim żadnej strony, a 28 października moduł nie pojawiał się na moim koncie.**

API dotyczy aplikacji sprzedających automatycznie odnawianą subskrypcję. Nie jest zarezerwowane dla dużych wydawców: RevenueCat zauważa w swoim [badaniu 22 milionów komunikatów](https://www.revenuecat.com/blog/growth/apple-retention-messaging-benchmarks), że małe aplikacje też mogą wnioskować o dostęp.

## 4 rodzaje komunikatów

| Rodzaj            | Co widzi subskrybent                           | Komunikat domyślny | Czas rzeczywisty |
| ----------------- | ---------------------------------------------- | ------------------ | ---------------- |
| Tekst             | Tytuł, tekst, do pięciu punktów                | Tak                | Tak              |
| Tekst z obrazem   | To samo, z obrazem                             | Tak                | Tak              |
| Zmiana planu      | Tekst i inna subskrypcja z tej samej grupy     | Nie                | Tak              |
| Oferta promocyjna | Tekst i oferta, by kontynuować w niższej cenie | Nie                | Tak              |

Według strony o [przygotowaniu komunikatów](https://developer.apple.com/documentation/retentionmessaging/setting-up-retention-messages) komunikat domyślny może być tylko tekstem, z obrazem lub bez. **Przez API zaproponowanie oferty albo innego planu wymaga odpowiedzi w czasie rzeczywistym.** Zapowiedziany moduł w App Store Connect pozwoli natomiast na komunikat z ofertą bez serwera.

Oferta promocyjna to ta, którą tworzysz w App Store Connect. Według [pomocy o ofertach promocyjnych](https://developer.apple.com/help/app-store-connect/manage-subscriptions/set-up-promotional-offers-for-auto-renewable-subscriptions) jest skierowana do obecnych i byłych subskrybentów. W komunikacie retencyjnym podpisuje ją twój serwer, zgodnie ze stroną o przygotowaniu komunikatów. Zmiana planu proponuje subskrypcję z tej samej grupy. Jeśli dopiero zaczynasz z tymi ofertami, przeczytaj najpierw mój poradnik o [kodach ofert i ofertach promocyjnych](https://devoria.fr/pl/blog/offer-codes-app-store-connect-kod-promocyjny).

## Co możesz pokazać: dokładne limity

| Element                  | Limit Apple                                                         |
| ------------------------ | ------------------------------------------------------------------- |
| Tytuł                    | Maksymalnie 66 znaków                                               |
| Tekst                    | Maksymalnie 144 znaki                                               |
| Punkty                   | Maksymalnie 5                                                       |
| Obraz na pełną szerokość | PNG bez przezroczystości, 3840 px szerokości, 160-2160 px wysokości |
| Obraz punktu             | 1024 × 1024 px                                                      |
| Obrazy na aplikację      | Maksymalnie 2000                                                    |

Długości pochodzą z opisu [treści żądania wysłania komunikatu](https://developer.apple.com/documentation/retentionmessaging/uploadmessagerequestbody), a formaty ze strony o [wysyłaniu obrazu](https://developer.apple.com/documentation/retentionmessaging/upload-image). Apple wymaga też obrazów, które dobrze wyglądają zarówno w trybie jasnym, jak i ciemnym.

Każdy komunikat i każdy obraz są sprawdzane przez Apple. Ich status zmienia się z `PENDING` na `APPROVED`, a system wyświetla tylko to, co zatwierdzone. W sandboxie zatwierdzenie jest automatyczne. Dokumentacja stawia jasną zasadę co do treści: nie wysyłaj niczego mylącego ani nieprawdziwego.

## Warunki do spełnienia

- **Komunikat domyślny dla każdego produktu, w każdym języku.** Bez niego w tym języku nic się nie wyświetli. To też koło zapasowe, gdy twój serwer nie odpowie.
- **Zatwierdzone komunikaty i obrazy** przed jakimkolwiek uruchomieniem.
- **Dla czasu rzeczywistego szybki serwer.** Strona o [konfiguracji adresu czasu rzeczywistego](https://developer.apple.com/documentation/retentionmessaging/setting-up-retention-messaging-endpoint) wymaga ważnego certyfikatu SSL, TLS 1.2 i odpowiedzi w mniej niż 700 ms na produkcji. Powyżej tego żądanie się nie powiedzie i wyświetli się komunikat domyślny.
- **Zaliczony test wydajności w sandboxie**, zanim zgłosisz adres produkcyjny.
- **Weryfikacja aplikacji.** Każde żądanie od Apple zawiera identyfikator aplikacji, `appAppleId`. Jeśli nie zgadza się z twoim, Apple prosi, żeby nie odpowiadać.

Żądanie w czasie rzeczywistym przekazuje ci identyfikator pierwotnej transakcji, produkt i język urządzenia. To ty wybierasz komunikat według własnych reguł.

## Konfiguracja Retention Messaging: trzy drogi

| Droga                   | Dla kogo                                | Czego potrzeba                                |
| ----------------------- | --------------------------------------- | --------------------------------------------- |
| Moduł App Store Connect | Dla wszystkich, gdy już wyjdzie         | Zero kodu; tekst, obraz lub oferta            |
| API, z własnym serwerem | Dla tych, którzy mają backend           | Dostęp od Apple, adres HTTPS, test wydajności |
| API, przez RevenueCat   | Aplikacje już korzystające z RevenueCat | Dostęp od Apple, ustawienia w panelu          |

Gdy kilka ustawień istnieje jednocześnie, Apple wyjaśnia w sesji WWDC26 kolejność: najpierw odpowiedź w czasie rzeczywistym. Jeśli jej brak lub jest błędna, ustawienie z App Store Connect. Jeśli go nie ma, komunikat domyślny skonfigurowany przez API.

### Z własnym serwerem

1. Złóż wniosek o dostęp przez formularz Apple.
2. Wyślij obrazy, potem komunikaty, każdy z tytułem i tekstem.
3. Poczekaj na ich zatwierdzenie, potem ustaw komunikat domyślny dla każdej subskrypcji i każdego języka.
4. Dla czasu rzeczywistego utwórz na swoim serwerze adres `Get Retention Message` i zgłoś go w sandboxie.
5. Uruchom [test wydajności](https://developer.apple.com/documentation/retentionmessaging/initiate-performance-test) w sandboxie, z transakcją testową.
6. Po zaliczonym teście zgłoś adres produkcyjny.

### Z RevenueCat

To droga, którą wybrałem: żadnego serwera do pisania, a moje aplikacje i tak już korzystają z RevenueCat, jak opisuję w [RevenueCat i subskrypcja in-app na iOS](https://devoria.fr/pl/blog/revenuecat-subskrypcja-in-app-ios). Według [dokumentacji RevenueCat](https://www.revenuecat.com/docs/platform-resources/apple-platform-resources/apple-retention-messaging-api):

1. W formularzu Apple podajesz adres, który RevenueCat pokazuje w ustawieniach twojej aplikacji App Store.
2. Po zgodzie otwórz Lifecycle, potem Retention, i podłącz adres sandboxowy.
3. Uruchom test wydajności z aktywną subskrypcją sandboxową lub z TestFlight. Może trwać do godziny.
4. Najpierw utwórz komunikat domyślny, język po języku.
5. Potem dodaj komunikaty czasu rzeczywistego, z regułami. Jedna z nich, „Is in free trial”, celuje w osoby na darmowym okresie próbnym.
6. Przejdź na produkcję: ustawienia z sandboxa nie są przenoszone, trzeba odtworzyć komunikaty.

## Jak napisać komunikat, który zatrzymuje, a nie wciąga w pułapkę

Tekst jest stały i sprawdzany przez Apple przed wyświetleniem. Nie może więc mówić o osobie, która go czyta, ani o dniu, w którym go czyta. Oto komunikat domyślny, który przygotowałem dla TradaZen, po francusku (tu w tłumaczeniu):

```text
Tytuł (57 znaków):
Chciałeś nauczyć się tradingu, a odchodzisz na ślepo?

Tekst (127 znaków):
Bez treningu każdy błąd opłacasz prawdziwymi pieniędzmi. Tu nic nie kosztują. Twoja seria, liga i lekcje się zatrzymają.
```

Zasady, które ustaliłem dla moich czterech aplikacji:

- **Tytuł przypomina osobie jej cel**, w formie pytania. Nie zawstydza jej.
- **Tekst mówi dokładnie, co się zatrzymuje.** Piszę, że dostęp „zostaje zablokowany”, gdy dane zostają, nigdy że zostaną „usunięte”.
- **Żadnych słów o czasie** typu „jutro” czy „dziś”: ten sam tekst wyświetla się w dowolnym momencie okresu.
- **Żadnych obietnic zysku**, żadnej sztucznej presji czasu. Pierwszy tytuł, który obiecywał zmianę życia dzięki tradingowi, odrzuciłem przed wysłaniem. [Guideline 5.6](https://developer.apple.com/app-store/review/guidelines/#5.6) zakazuje wszelkich manipulacyjnych praktyk, a paywall TradaZen został już z tego powodu odrzucony, o czym piszę w [guideline 5.6 i paywall](https://devoria.fr/pl/blog/guideline-5-6-paywall-odrzucenie-aplikacji).
- **Każdy język ma własny tekst**, w słownictwie przetłumaczonej aplikacji, policzony co do znaku.

Dla TradaZen planuję też komunikat czasu rzeczywistego dla osób na okresie próbnym subskrypcji rocznej. Zaproponuje tańszy plan roczny z tej samej grupy, bo moje dane pokazują, że te osoby korzystają z aplikacji tyle samo co płacący: odrzucają cenę. To ustawienie czeka na zgodę Apple.

## Czego można się spodziewać

Nie licz na cud. Apple nazywa współczynnikiem ratowania (save rate) odsetek subskrybentów, którzy zachowują subskrypcję po dotarciu na ekran potwierdzenia. W sesji WWDC26 Apple podaje, że subskrypcje korzystające z Retention Messaging zyskują średnio 1,4 punktu tego współczynnika. Komunikaty z ofertą promocyjną dają najlepszy zaobserwowany wzrost, 5,5 punktu, a wyniki różnią się między deweloperami. Z kolei badanie RevenueCat wskazuje, że subskrybenci przyjmują tylko około 1,1% ofert promocyjnych i 0,6% zmian planu.

Komunikat nie zastąpi więc pracy na wcześniejszych etapach. Darmowy okres próbny anulowany w ciągu minuty rozstrzyga się na paywallu i w pierwszych sesjach: przyczyny i dźwignie znajdziesz w moim poradniku o [anulowanym okresie próbnym](https://devoria.fr/pl/blog/darmowy-okres-probny-anulowany-od-razu-ios), a tworzenie okresu próbnego w [ofercie wprowadzającej](https://devoria.fr/pl/blog/introductory-offer-app-store-darmowy-okres-probny-ios).

## Przygotuj subskrypcję, zanim zajmiesz się komunikatem

[iOS & Android Kit](https://devoria.fr/pl/kits/ios) opiera się na kodzie startowym moich aplikacji: onboarding, paywall i subskrypcje są już zakodowane, a czteroetapowa ścieżka prowadzi cię aż do App Store, we własnym tempie. Cały łańcuch, od produktów w App Store Connect po paywall, jest opisany na stronie [subskrypcja in-app na iOS](https://devoria.fr/pl/expertise/subskrypcja-w-aplikacji-ios).

Jeśli przygotowujesz swoje pierwsze wydanie, [zrób darmową diagnozę](https://devoria.fr/pl/diagnostic): powie ci, co naprawdę blokuje twój projekt, i wyśle ci moją checklistę przeciw odrzuceniom przez Apple.

## Najczęściej zadawane pytania

### Czym jest Retention Messaging API od Apple?

To usługa typu serwer-serwer, która wybiera komunikat pokazywany subskrybentowi, gdy stuka Cancel Subscription. Komunikat wyświetla się na ekranie potwierdzenia, przed anulowaniem. Może przypomnieć, co daje subskrypcja, zaproponować inny plan albo ofertę promocyjną.

### Czy Retention Messaging jest dostępne dla wszystkich deweloperów?

API jest w wersji preview, dostęp przyznaje Apple na wniosek. Na WWDC26 Apple zapowiedział moduł w App Store Connect, otwarty dla wszystkich, planowany na jesień 2026. Na 3 listopada 2026 pomoc App Store Connect jeszcze go nie opisuje.

### Na jakich wersjach iOS wyświetla się komunikat?

Na iOS 15.1 i iPadOS 15.1 lub nowszym, na visionOS 1 oraz na macOS 14 lub nowszym. Na starszym urządzeniu anulowanie odbywa się bez komunikatu.

### Czy komunikat uniemożliwia subskrybentowi anulowanie?

Nie. Ekran potwierdzenia zachowuje przycisk anulowania. Subskrybent może też zachować subskrypcję albo przyjąć zaproponowaną ofertę lub plan.

### Czy można zaproponować zniżkę w momencie anulowania?

Tak. Przez API to komunikat z ofertą promocyjną, tylko w czasie rzeczywistym: oferta jest tworzona w App Store Connect i podpisywana przez twój serwer. Zapowiedziany moduł w App Store Connect też pozwala na komunikat z ofertą. Zmiana planu proponuje natomiast inną subskrypcję z tej samej grupy.

### Ile znaków może mieć komunikat retencyjny?

Tytuł ma maksymalnie 66 znaków, tekst 144. Możesz dodać do pięciu punktów i obraz PNG bez przezroczystości. Każdy język potrzebuje własnego komunikatu domyślnego.

### Czy do Retention Messaging potrzebny jest serwer?

Dla komunikatów domyślnych nie musisz hostować żadnego adresu: wystarczy wywołać API, żeby je wysłać i ustawić. Z RevenueCat to on pełni rolę serwera. Czas rzeczywisty wymaga adresu HTTPS, który odpowiada w mniej niż 700 ms. Zapowiedziany moduł w App Store Connect konfiguruje się bez kodu.


## Twój projekt

[iOS & Android Kit](https://devoria.fr/pl/kits/ios): Stwórz swoją aplikację na iPhone'a i Androida z Claude Code: kod startowy moich aplikacji, droga aż do sklepów i wszystkie kity. 439 zł.

[Diagnoza: co dzieli cię od twojej aplikacji na iPhone'a](https://devoria.fr/pl/diagnostic): 7 pytań, 60 sekund: wiesz, co naprawdę blokuje publikację twojej aplikacji na iPhone'a, masz plan w 4 krokach i kit dopasowany do ciebie.
