# Retention Messaging API Apple: сообщение перед отменой

> Retention Messaging API от Apple показывает твоё сообщение, когда подписчик нажимает Cancel Subscription. Форматы, условия, доступ и настройка.

Оригинальная страница: [Retention Messaging API Apple: сообщение перед отменой](https://devoria.fr/ru/blog/retention-messaging-api-apple-cancel-subscription)
Автор: [Mehdi Azizi](https://devoria.fr/ru/mehdi-azizi)
Опубликовано: 2026-11-04
Последняя правка контента: 2026-11-04


Retention Messaging API это серверный (server-to-server) сервис Apple, который показывает твоё сообщение подписчику в момент, когда он нажимает Cancel Subscription. Сообщение появляется на странице подтверждения, до того как отмена вступит в силу. **Оно может напомнить о ценности подписки, предложить другой тариф или промо-предложение, но кнопка отмены всегда остаётся на месте.** API находится в стадии preview с июля 2025 года, доступ по запросу, а на осень 2026 года Apple анонсировала упрощённую версию прямо в App Store Connect.

В этом гайде разберём, что показывает API, с какого времени он существует, кто может им пользоваться, какие у него условия и как его настроить. Всё взято из документации Apple и посвящённой ему сессии WWDC26, перечитанных 3 ноября 2026 года.

Я продаю подписки в своих iOS-приложениях: Solys (блокировщик соцсетей), TradaZen (симулятор трейдинга), Nolera (примерка одежды с помощью ИИ) и Vigie. 25 октября 2026 года я запросил доступ к API для всех четырёх и подготовил сообщения на всех их языках. На 28 октября одобрения от Apple ещё не было, так что этот гайд описывает правила и мою подготовку, а не результаты.

## Что делает Retention Messaging API

Согласно [документации Apple](https://developer.apple.com/documentation/retentionmessaging), API позволяет выбрать сообщение, которое система показывает, когда клиент открывает страницу подписки и, возможно, собирается её отменить. Сообщения ты готовишь заранее, для каждого продукта и каждого языка.

Сценарий всегда один и тот же:

1. Подписчик открывает свою подписку, например через Apple Account, Subscriptions, или из App Store.
2. Нажимает Cancel Subscription.
3. Система показывает страницу подтверждения (Confirm Cancellation) с твоим сообщением.
4. Он может всё равно отменить подписку, оставить её или принять то, что предлагает твоё сообщение.

Сообщение видно на iOS 15.1 и iPadOS 15.1 или новее, на visionOS 1 и на macOS 14 или новее.

## С какого времени и для кого

| Дата          | Что меняется, по данным Apple                                   |
| ------------- | --------------------------------------------------------------- |
| 16 июля 2025  | Версия 1.0: первая preview-версия API                           |
| 9 дек. 2025   | Тест производительности сервера для режима реального времени    |
| 31 марта 2026 | Пункты списка в сообщениях, настройка realtime-адреса через API |
| 27 апр. 2026  | Поддержка ежемесячных подписок с обязательством на 12 месяцев   |
| Июнь 2026     | WWDC26: анонс модуля в App Store Connect                        |

Даты взяты из [журнала версий API](https://developer.apple.com/documentation/retentionmessaging/retention-messaging-changelog), кроме последней, она из сессии WWDC26. API по-прежнему в стадии preview: документация отправляет на [форму запроса доступа](https://developer.apple.com/contact/request/retention-messaging-api/), для которой нужно войти в аккаунт разработчика.

На WWDC26 в сессии [Explore Retention Messaging in App Store Connect](https://developer.apple.com/videos/play/wwdc2026/309/) показали модуль в App Store Connect, который настраивается без кода. Apple говорит, что он «открыт для всех». А вот режим реального времени остаётся по запросу. [Страница новинок App Store](https://developer.apple.com/app-store/whats-new/) обещает модуль «этой осенью». **На 3 ноября 2026 года в справке App Store Connect ему ещё не посвящено ни одной страницы, а 28 октября в моём аккаунте модуля не было.**

API касается приложений, которые продают автовозобновляемую подписку. Это не только для крупных издателей: RevenueCat в своём [исследовании 22 миллионов сообщений](https://www.revenuecat.com/blog/growth/apple-retention-messaging-benchmarks) отмечает, что небольшие приложения тоже могут запросить доступ.

## 4 типа сообщений

| Тип               | Что видит подписчик                              | Сообщение по умолчанию | Реальное время |
| ----------------- | ------------------------------------------------ | ---------------------- | -------------- |
| Текст             | Заголовок, текст, до пяти пунктов                | Да                     | Да             |
| Текст с картинкой | То же самое, плюс картинка                       | Да                     | Да             |
| Смена тарифа      | Текст и другая подписка из той же группы         | Нет                    | Да             |
| Промо-предложение | Текст и предложение продолжить по сниженной цене | Нет                    | Да             |

Согласно странице о [подготовке сообщений](https://developer.apple.com/documentation/retentionmessaging/setting-up-retention-messages), сообщение по умолчанию может быть только текстом, с картинкой или без. **В API, чтобы предложить скидку или другой тариф, нужно отвечать в реальном времени.** Анонсированный модуль в App Store Connect, напротив, позволит показать сообщение с предложением без сервера.

Промо-предложение это то, которое ты создаёшь в App Store Connect. Согласно [справке о промо-предложениях](https://developer.apple.com/help/app-store-connect/manage-subscriptions/set-up-promotional-offers-for-auto-renewable-subscriptions), оно нацелено на текущих и бывших подписчиков. В retention-сообщении его подписывает твой сервер, как сказано на странице о подготовке сообщений. Смена тарифа предлагает подписку из той же группы. Если ты только начинаешь работать с такими предложениями, сначала прочитай мой гайд про [коды предложений и промо-предложения](https://devoria.fr/ru/blog/offer-codes-app-store-connect-promo-code).

## Что можно показать: точные ограничения

| Элемент                | Ограничение Apple                                           |
| ---------------------- | ----------------------------------------------------------- |
| Заголовок              | Не более 66 символов                                        |
| Текст                  | Не более 144 символов                                       |
| Пункты                 | Не более 5                                                  |
| Картинка на всю ширину | PNG без прозрачности, ширина 3840 px, высота от 160 до 2160 |
| Картинка пункта        | 1024 × 1024 px                                              |
| Картинок на приложение | Не более 2000                                               |

Длины взяты из описания [тела запроса на отправку сообщения](https://developer.apple.com/documentation/retentionmessaging/uploadmessagerequestbody), а форматы со страницы об [отправке картинки](https://developer.apple.com/documentation/retentionmessaging/upload-image). Apple также просит картинки, которые одинаково хорошо смотрятся и в светлой, и в тёмной теме.

Каждое сообщение и каждую картинку проверяет Apple. Их статус меняется с `PENDING` на `APPROVED`, и система показывает только одобренное. В sandbox одобрение автоматическое. В документации есть чёткое правило по содержанию: ничего вводящего в заблуждение или неточного.

## Какие условия нужно выполнить

- **Сообщение по умолчанию для каждого продукта на каждом языке.** Без него на этом языке ничего не покажется. Это ещё и запасной вариант, если твой сервер не ответит.
- **Одобренные сообщения и картинки** до любого запуска.
- **Для реального времени нужен быстрый сервер.** Страница о [настройке realtime-адреса](https://developer.apple.com/documentation/retentionmessaging/setting-up-retention-messaging-endpoint) требует валидный SSL-сертификат, TLS 1.2 и ответ быстрее 700 мс в продакшене. Если дольше, запрос падает и показывается сообщение по умолчанию.
- **Успешно пройденный тест производительности в sandbox**, прежде чем объявлять продакшен-адрес.
- **Проверка приложения.** Каждый запрос Apple содержит идентификатор приложения, `appAppleId`. Если он не совпадает с твоим, Apple просит не отвечать.

Realtime-запрос передаёт тебе идентификатор исходной транзакции, продукт и язык устройства. Какое сообщение выбрать, решаешь ты, по своим правилам.

## Как настроить Retention Messaging: три пути

| Путь                     | Для кого                          | Что нужно                                             |
| ------------------------ | --------------------------------- | ----------------------------------------------------- |
| Модуль App Store Connect | Для всех, когда выйдет            | Никакого кода; текст, картинка или предложение        |
| API со своим сервером    | Для тех, у кого есть бэкенд       | Доступ от Apple, HTTPS-адрес, тест производительности |
| API через RevenueCat     | Для приложений, уже на RevenueCat | Доступ от Apple, настройки в дашборде                 |

Если настроено несколько вариантов сразу, Apple в сессии WWDC26 объясняет порядок: сначала ответ в реальном времени. Если его нет или он сформирован неправильно, используется настройка из App Store Connect. Если её нет, сообщение по умолчанию, настроенное через API.

### Со своим сервером

1. Запроси доступ через форму Apple.
2. Загрузи картинки, затем сообщения, у каждого заголовок и текст.
3. Дождись одобрения, затем назначь сообщение по умолчанию для каждой подписки и каждого языка.
4. Для реального времени создай на сервере адрес `Get Retention Message` и укажи его в sandbox.
5. Запусти [тест производительности](https://developer.apple.com/documentation/retentionmessaging/initiate-performance-test) в sandbox с тестовой транзакцией.
6. Когда тест пройден, укажи продакшен-адрес.

### Через RevenueCat

Это путь, который выбрал я: не нужно писать сервер, а мои приложения и так работают через RevenueCat, как я рассказываю в статье [RevenueCat и in-app подписка на iOS](https://devoria.fr/ru/blog/revenuecat-podpiska-ios-prilozhenie). Согласно [документации RevenueCat](https://www.revenuecat.com/docs/platform-resources/apple-platform-resources/apple-retention-messaging-api):

1. В форме Apple укажи адрес, который RevenueCat показывает в настройках твоего App Store-приложения.
2. После одобрения открой Lifecycle, затем Retention, и подключи sandbox-адрес.
3. Запусти тест производительности с активной подпиской sandbox или TestFlight. Он может длиться до часа.
4. Сначала создай сообщение по умолчанию, язык за языком.
5. Потом добавь realtime-сообщения с правилами. Одно из них, «Is in free trial», нацелено на тех, кто на бесплатном пробном периоде.
6. Переходи в продакшен: настройки sandbox не переносятся, сообщения нужно создать заново.

## Как написать сообщение, которое удерживает, а не ловит в ловушку

Текст фиксированный и проверяется Apple перед показом. Поэтому он не может говорить ни о человеке, который его читает, ни о дне, когда он его читает. Вот сообщение по умолчанию, которое я подготовил для TradaZen, в русской версии:

```text
Заголовок (52 символа):
Хотел научиться трейдингу, а теперь уходишь вслепую?

Текст (126 символов):
Без тренировки каждую ошибку оплачивают твои реальные деньги. Здесь они ничего не стоят. Твоя серия, лига и уроки остановятся.
```

Правила, которые я себе поставил для всех четырёх приложений:

- **Заголовок возвращает человека к его цели**, в форме вопроса. Он не стыдит.
- **Текст говорит, что именно прекращается.** Я пишу, что доступ «блокируется», если данные сохраняются, и никогда не пишу, что они будут «удалены».
- **Никаких слов про время** вроде «завтра» или «сегодня»: один и тот же текст показывается в любой момент периода.
- **Никаких обещаний заработка**, никакой фальшивой срочности. Первый заголовок, обещавший изменить жизнь благодаря трейдингу, я отбросил ещё до отправки. [Guideline 5.6](https://developer.apple.com/app-store/review/guidelines/#5.6) запрещает любые манипулятивные практики, и пейвол TradaZen уже отклоняли именно по этой причине, как я рассказываю в статье [guideline 5.6 и пейвол](https://devoria.fr/ru/blog/guideline-5-6-paywall-app-store-rejection).
- **У каждого языка свой текст**, в лексике переведённого приложения, с подсчётом до символа.

Для TradaZen я ещё планирую realtime-сообщение для тех, кто на пробном периоде годовой подписки. Оно предложит более дешёвый годовой тариф из той же группы, потому что мои цифры показывают: эти люди пользуются приложением так же, как платящие, отказываются они от цены. Эта настройка ждёт одобрения Apple.

## Чего от этого ждать

Не рассчитывай на чудо. Apple называет save rate долю подписчиков, которые оставляют подписку, дойдя до страницы подтверждения. В сессии WWDC26 Apple сообщает, что подписки, подключившие Retention Messaging, в среднем прибавляют 1,4 пункта этого показателя. Лучший наблюдаемый прирост, 5,5 пункта, дают сообщения с промо-предложением, и результаты сильно отличаются у разных разработчиков. А исследование RevenueCat отмечает, что подписчики принимают лишь около 1,1 % промо-предложений и 0,6 % предложений сменить тариф.

Так что сообщение не заменяет работу на более ранних этапах. Пробный период, который отменяют через минуту, решается на пейволе и в первых сессиях: причины и рычаги в моём гайде про [отменённый бесплатный пробный период](https://devoria.fr/ru/blog/ios-free-trial-cancelled-immediately), а создание пробного периода в статье про [вводное предложение](https://devoria.fr/ru/blog/introductory-offer-app-store-connect-free-trial).

## Подготовь подписку до сообщения

[iOS & Android Kit](https://devoria.fr/ru/kits/ios) построен на стартовом коде моих приложений: онбординг, пейвол и подписки уже написаны, а путь из четырёх этапов доведёт тебя до App Store в твоём темпе. Вся цепочка, от продуктов в App Store Connect до пейвола, описана на странице [in-app подписка на iOS](https://devoria.fr/ru/expertise/ios-in-app-subscription).

Если ты готовишь свой первый релиз, [пройди бесплатную диагностику](https://devoria.fr/ru/diagnostic): она покажет, что на самом деле тормозит твой проект, и пришлёт мой чек-лист против отказов Apple.

## Частые вопросы

### Что такое Retention Messaging API от Apple?

Это серверный сервис, который выбирает сообщение, показываемое подписчику, когда он нажимает Cancel Subscription. Сообщение появляется на странице подтверждения, до отмены. Оно может напомнить о ценности подписки, предложить другой тариф или промо-предложение.

### Доступен ли Retention Messaging всем разработчикам?

API в стадии preview, доступ по запросу к Apple. На WWDC26 Apple анонсировала модуль в App Store Connect, открытый для всех, запланированный на осень 2026 года. На 3 ноября 2026 года справка App Store Connect его ещё не описывает.

### На каких версиях iOS показывается сообщение?

На iOS 15.1 и iPadOS 15.1 или новее, на visionOS 1 и на macOS 14 или новее. На более старом устройстве отмена проходит без сообщения.

### Мешает ли сообщение подписчику отменить подписку?

Нет. На странице подтверждения остаётся кнопка отмены. Подписчик также может оставить подписку или принять предложенную скидку или тариф.

### Можно ли предложить скидку в момент отмены?

Да. В API это сообщение с промо-предложением, только в реальном времени: предложение создаётся в App Store Connect и подписывается твоим сервером. Анонсированный модуль в App Store Connect тоже позволяет показать сообщение с предложением. А смена тарифа предлагает другую подписку из той же группы.

### Сколько символов в retention-сообщении?

Заголовок не более 66 символов, текст не более 144. Можно добавить до пяти пунктов и PNG-картинку без прозрачности. Для каждого языка нужно своё сообщение по умолчанию.

### Нужен ли сервер, чтобы пользоваться Retention Messaging?

Для сообщений по умолчанию хостить адрес не нужно: достаточно вызвать API, чтобы загрузить и назначить их. С RevenueCat роль сервера играет он сам. Для реального времени нужен HTTPS-адрес, отвечающий быстрее 700 мс. Анонсированный модуль в App Store Connect настраивается без кода.


## Твой проект

[iOS & Android Kit](https://devoria.fr/ru/kits/ios): Создай своё приложение для iPhone и Android с Claude Code: стартовый код моих приложений, путь до публикации в сторах и все киты. 109 $.

[Диагностика: что отделяет тебя от твоего iPhone-приложения](https://devoria.fr/ru/diagnostic): 7 вопросов, 60 секунд: ты узнаешь, что на самом деле мешает тебе опубликовать iPhone-приложение, получишь путь из 4 этапов и подходящий тебе кит.
