Retention Messaging API Apple: сообщение перед отменой
Автор: Mehdi Azizi
Опубликовано , 10 мин
Retention Messaging API от Apple показывает твоё сообщение, когда подписчик нажимает Cancel Subscription. Форматы, условия, доступ и настройка.
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, API позволяет выбрать сообщение, которое система показывает, когда клиент открывает страницу подписки и, возможно, собирается её отменить. Сообщения ты готовишь заранее, для каждого продукта и каждого языка.
Сценарий всегда один и тот же:
- Подписчик открывает свою подписку, например через Apple Account, Subscriptions, или из App Store.
- Нажимает Cancel Subscription.
- Система показывает страницу подтверждения (Confirm Cancellation) с твоим сообщением.
- Он может всё равно отменить подписку, оставить её или принять то, что предлагает твоё сообщение.
Сообщение видно на 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, кроме последней, она из сессии WWDC26. API по-прежнему в стадии preview: документация отправляет на форму запроса доступа, для которой нужно войти в аккаунт разработчика.
На WWDC26 в сессии Explore Retention Messaging in App Store Connect показали модуль в App Store Connect, который настраивается без кода. Apple говорит, что он «открыт для всех». А вот режим реального времени остаётся по запросу. Страница новинок App Store обещает модуль «этой осенью». На 3 ноября 2026 года в справке App Store Connect ему ещё не посвящено ни одной страницы, а 28 октября в моём аккаунте модуля не было.
API касается приложений, которые продают автовозобновляемую подписку. Это не только для крупных издателей: RevenueCat в своём исследовании 22 миллионов сообщений отмечает, что небольшие приложения тоже могут запросить доступ.
4 типа сообщений
| Тип | Что видит подписчик | Сообщение по умолчанию | Реальное время |
|---|---|---|---|
| Текст | Заголовок, текст, до пяти пунктов | Да | Да |
| Текст с картинкой | То же самое, плюс картинка | Да | Да |
| Смена тарифа | Текст и другая подписка из той же группы | Нет | Да |
| Промо-предложение | Текст и предложение продолжить по сниженной цене | Нет | Да |
Согласно странице о подготовке сообщений, сообщение по умолчанию может быть только текстом, с картинкой или без. В API, чтобы предложить скидку или другой тариф, нужно отвечать в реальном времени. Анонсированный модуль в App Store Connect, напротив, позволит показать сообщение с предложением без сервера.
Промо-предложение это то, которое ты создаёшь в App Store Connect. Согласно справке о промо-предложениях, оно нацелено на текущих и бывших подписчиков. В retention-сообщении его подписывает твой сервер, как сказано на странице о подготовке сообщений. Смена тарифа предлагает подписку из той же группы. Если ты только начинаешь работать с такими предложениями, сначала прочитай мой гайд про коды предложений и промо-предложения.
Что можно показать: точные ограничения
| Элемент | Ограничение Apple |
|---|---|
| Заголовок | Не более 66 символов |
| Текст | Не более 144 символов |
| Пункты | Не более 5 |
| Картинка на всю ширину | PNG без прозрачности, ширина 3840 px, высота от 160 до 2160 |
| Картинка пункта | 1024 × 1024 px |
| Картинок на приложение | Не более 2000 |
Длины взяты из описания тела запроса на отправку сообщения, а форматы со страницы об отправке картинки. Apple также просит картинки, которые одинаково хорошо смотрятся и в светлой, и в тёмной теме.
Каждое сообщение и каждую картинку проверяет Apple. Их статус меняется с PENDING на APPROVED, и система показывает только одобренное. В sandbox одобрение автоматическое. В документации есть чёткое правило по содержанию: ничего вводящего в заблуждение или неточного.
Какие условия нужно выполнить
- Сообщение по умолчанию для каждого продукта на каждом языке. Без него на этом языке ничего не покажется. Это ещё и запасной вариант, если твой сервер не ответит.
- Одобренные сообщения и картинки до любого запуска.
- Для реального времени нужен быстрый сервер. Страница о настройке realtime-адреса требует валидный 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.
Со своим сервером
- Запроси доступ через форму Apple.
- Загрузи картинки, затем сообщения, у каждого заголовок и текст.
- Дождись одобрения, затем назначь сообщение по умолчанию для каждой подписки и каждого языка.
- Для реального времени создай на сервере адрес
Get Retention Messageи укажи его в sandbox. - Запусти тест производительности в sandbox с тестовой транзакцией.
- Когда тест пройден, укажи продакшен-адрес.
Через RevenueCat
Это путь, который выбрал я: не нужно писать сервер, а мои приложения и так работают через RevenueCat, как я рассказываю в статье RevenueCat и in-app подписка на iOS. Согласно документации RevenueCat:
- В форме Apple укажи адрес, который RevenueCat показывает в настройках твоего App Store-приложения.
- После одобрения открой Lifecycle, затем Retention, и подключи sandbox-адрес.
- Запусти тест производительности с активной подпиской sandbox или TestFlight. Он может длиться до часа.
- Сначала создай сообщение по умолчанию, язык за языком.
- Потом добавь realtime-сообщения с правилами. Одно из них, «Is in free trial», нацелено на тех, кто на бесплатном пробном периоде.
- Переходи в продакшен: настройки sandbox не переносятся, сообщения нужно создать заново.
Как написать сообщение, которое удерживает, а не ловит в ловушку
Текст фиксированный и проверяется Apple перед показом. Поэтому он не может говорить ни о человеке, который его читает, ни о дне, когда он его читает. Вот сообщение по умолчанию, которое я подготовил для TradaZen, в русской версии:
Заголовок (52 символа):
Хотел научиться трейдингу, а теперь уходишь вслепую?
Текст (126 символов):
Без тренировки каждую ошибку оплачивают твои реальные деньги. Здесь они ничего не стоят. Твоя серия, лига и уроки остановятся.
Правила, которые я себе поставил для всех четырёх приложений:
- Заголовок возвращает человека к его цели, в форме вопроса. Он не стыдит.
- Текст говорит, что именно прекращается. Я пишу, что доступ «блокируется», если данные сохраняются, и никогда не пишу, что они будут «удалены».
- Никаких слов про время вроде «завтра» или «сегодня»: один и тот же текст показывается в любой момент периода.
- Никаких обещаний заработка, никакой фальшивой срочности. Первый заголовок, обещавший изменить жизнь благодаря трейдингу, я отбросил ещё до отправки. Guideline 5.6 запрещает любые манипулятивные практики, и пейвол TradaZen уже отклоняли именно по этой причине, как я рассказываю в статье guideline 5.6 и пейвол.
- У каждого языка свой текст, в лексике переведённого приложения, с подсчётом до символа.
Для TradaZen я ещё планирую realtime-сообщение для тех, кто на пробном периоде годовой подписки. Оно предложит более дешёвый годовой тариф из той же группы, потому что мои цифры показывают: эти люди пользуются приложением так же, как платящие, отказываются они от цены. Эта настройка ждёт одобрения Apple.
Чего от этого ждать
Не рассчитывай на чудо. Apple называет save rate долю подписчиков, которые оставляют подписку, дойдя до страницы подтверждения. В сессии WWDC26 Apple сообщает, что подписки, подключившие Retention Messaging, в среднем прибавляют 1,4 пункта этого показателя. Лучший наблюдаемый прирост, 5,5 пункта, дают сообщения с промо-предложением, и результаты сильно отличаются у разных разработчиков. А исследование RevenueCat отмечает, что подписчики принимают лишь около 1,1 % промо-предложений и 0,6 % предложений сменить тариф.
Так что сообщение не заменяет работу на более ранних этапах. Пробный период, который отменяют через минуту, решается на пейволе и в первых сессиях: причины и рычаги в моём гайде про отменённый бесплатный пробный период, а создание пробного периода в статье про вводное предложение.
Подготовь подписку до сообщения
iOS & Android Kit построен на стартовом коде моих приложений: онбординг, пейвол и подписки уже написаны, а путь из четырёх этапов доведёт тебя до App Store в твоём темпе. Вся цепочка, от продуктов в App Store Connect до пейвола, описана на странице in-app подписка на iOS.
Если ты готовишь свой первый релиз, пройди бесплатную диагностику: она покажет, что на самом деле тормозит твой проект, и пришлёт мой чек-лист против отказов 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 настраивается без кода.

