Миграция с Superwall
Большинство миграций с Superwall на Adapty занимают около двух часов. Вы заменяете SDK, направляете серверные уведомления стора на Adapty и выпускаете новую версию приложения. Платные подписчики сохраняют доступ — Adapty восстанавливает его из чеков App Store и Google Play при первом запуске.
Ваши подписчики мигрируют автоматически
Все пользователи, когда-либо активировавшие подписку, переходят на Adapty сразу после открытия новой версии приложения с SDK Adapty. Валидация статуса подписки и доступ к премиум-функциям восстанавливаются автоматически.
Структура руководства
Миграция состоит из шести шагов:
- Сопоставьте концепции Superwall с Adapty
- Установите SDK Adapty
- Замените SDK-вызовы
- Переключите серверные уведомления App Store и Google Play
- Протестируйте и выпустите релиз
- (Опционально) Импортируйте исторические данные
Сопоставьте концепции Superwall с Adapty
Большинство концепций Superwall имеют прямой аналог в Adapty:
| Superwall | Adapty | Что меняется |
|---|---|---|
| Campaign | Плейсмент + Аудитория | Логика кампании разделяется на плейсмент (место показа) и аудиторию (правило). |
| Placement | Плейсмент | Та же концепция, то же название. |
| Audience filter | Аудитория | Наборы правил живут внутри плейсмента. |
| Entitlement | Уровень доступа | Именованный идентификатор (например, premium). |
| WebView paywall | Пейвол Paywall Builder | Отрисовывается SDK Adapty нативно вместо WKWebView. |
PurchaseController | Встроенный | Протокол реализовывать не нужно — Adapty обрабатывает покупки самостоятельно. |
| Feature gating | Проверка уровня доступа | Проверяйте profile.accessLevels["premium"]?.isActive. |
Перед тем как касаться кода, стоит осмыслить два ключевых отличия:
- Получение и показ — это отдельные шаги:
registerв Superwall за один вызов получает пейвол, оценивает кампанию и показывает UI. Adapty разделяет эти шаги — вы получаете пейвол, загружаете его конфигурацию, а затем показываете. Это добавляет несколько строк кода, но позволяет предзагружать конфигурации, показывать собственное состояние загрузки или отменять показ по вашей логике. - Статус подписки привязан к уровню доступа: Superwall предоставляет единственное публикуемое свойство
subscriptionStatus. Adapty возвращаетAdaptyProfileс именованными уровнями доступа, так что один пользователь может одновременно иметь уровни доступаsportsиscience. Для синхронного чтения кешируйте профиль изAdaptyDelegate, а не вызывайтеgetProfile()при каждой загрузке экрана.
Установите SDK Adapty
Установите SDK Adapty для вашей платформы — iOS, Android, React Native, Flutter, Kotlin Multiplatform, Unity или Capacitor — и одновременно удалите SuperwallKit из проекта.
Замените SDK-вызовы
Пройдитесь по каждой части интеграции и замените вызовы Superwall на эквиваленты Adapty. Ссылки в конце каждого подраздела охватывают все семь платформенных SDK — перейдите по той, которая соответствует вашему приложению.
Инициализация SDK
Замените Superwall.configure на Adapty.activate.
Смотрите руководство по установке для вашей платформы — iOS, Android, React Native, Flutter, Kotlin Multiplatform, Unity или Capacitor.
Идентификация и выход пользователей
Замените Superwall.shared.identify на Adapty.identify, а Superwall.shared.reset — на Adapty.logout. Оба SDK генерируют анонимный профиль при первом запуске, поэтому эти вызовы нужны только при входе или выходе пользователя. После идентификации заново получайте пейволы — новый пользователь может попасть в другую аудиторию.
Смотрите руководство по идентификации для вашей платформы — iOS, Android, React Native, Flutter, Kotlin Multiplatform, Unity или Capacitor.
Получение и показ пейвола
Замените Superwall.shared.register на двухшаговый флоу: получите пейвол через Adapty.getPaywall, загрузите конфигурацию его вида через AdaptyUI.getPaywallConfiguration, а затем покажите его.
Два важных отличия:
- Feature gating заменяет замыкание
feature:: после закрытия пейвола проверьте активный уровень доступа в возвращённом профиле (или черезAdapty.getProfile) и разветвляйте логику оттуда. - Пейволы отрисовываются SDK: Superwall рендерит пейволы внутри
WKWebView. Adapty рендерит пейволы Paywall Builder нативно — шрифты, информация о продуктах и кнопки отрисовываются SDK.
Смотрите быстрый старт по пейволам для вашей платформы — iOS, Android, React Native, Flutter, Kotlin Multiplatform, Unity или Capacitor.
Проверка статуса подписки
Замените Superwall.shared.subscriptionStatus на проверку именованного уровня доступа в профиле: profile.accessLevels["premium"]?.isActive. Отслеживайте изменения через AdaptyDelegate.didLoadLatestProfile(_:) вместо паттерна с @Published-свойством, и кешируйте профиль на своей стороне для синхронного чтения.
Смотрите руководство по статусу подписки для вашей платформы — iOS, Android, React Native, Flutter, Kotlin Multiplatform, Unity или Capacitor.
Обработка покупок и восстановлений
При использовании Paywall Builder оба SDK обрабатывают покупки автоматически внутри UI пейвола — этот шаг можно пропустить.
Для кастомных пейволов Superwall требует реализации PurchaseController. В Adapty этого не нужно: замените PurchaseController.purchase на Adapty.makePurchase, а PurchaseController.restorePurchases — на Adapty.restorePurchases. SDK самостоятельно выполняет валидацию.
Смотрите быстрый старт по кастомным пейволам для вашей платформы — iOS, Android, React Native, Flutter, Kotlin Multiplatform, Unity или Capacitor.
Установка атрибутов пользователя
Замените Superwall.shared.setUserAttributes на Adapty.updateProfile.
Смотрите руководство по атрибутам пользователя для вашей платформы — iOS, Android, React Native, Flutter, Kotlin Multiplatform, Unity или Capacitor.
Переключите серверные уведомления App Store и Google Play
Направьте серверные уведомления стора на Adapty. Adapty работает и без них, но аналитика, сторонние интеграции и метрики A/B-тестов зависят от этих уведомлений:
- App Store: следуйте инструкции Включить серверные уведомления App Store.
- Google Play: следуйте инструкции Включить уведомления для разработчиков в реальном времени.
Если вы хотите запускать Superwall и Adapty параллельно в процессе выкатки, используйте переадресацию необработанных событий — Adapty проксирует события стора обратно в Superwall, пока вы проверяете новую интеграцию.
Протестируйте и выпустите релиз
Перед релизом убедитесь, что выполнены все пункты:
- Настроен дашборд Adapty (продукты, пейволы, плейсменты, уровни доступа)
- Установлен SDK Adapty
- Вызовы Superwall SDK заменены на эквиваленты Adapty
- Серверные уведомления App Store и Google Play направлены на Adapty
- Совершена покупка в песочнице
- Отправлен новый релиз приложения
Пройдите чеклист перед релизом для финальной проверки.
(Опционально) Импортируйте исторические данные
Superwall не хранит ваш статус подписки — это делают App Store и Google Play. Adapty валидирует чеки при первом запуске, поэтому платные пользователи сохраняют доступ без какого-либо импорта.
Если вы хотите, чтобы исторические транзакции были добавлены в аналитику Adapty, следуйте инструкции Импорт исторических данных в Adapty. Подождите не менее недели после выпуска SDK, чтобы он успел собрать актуальные цены покупок.
FAQ
Что произойдёт с подписчиками, которые не обновят приложение?
Большинство пользователей обновляют приложения автоматически в ночное время, поэтому доля пользователей на старой версии быстро сокращается. Подписчики на старой версии сохраняют доступ напрямую через App Store или Google Play — принудительное обновление не требуется.
Перенесутся ли аудитории моих кампаний Superwall?
Нет. Фильтры аудиторий Superwall и аудитории Adapty настраиваются в разных дашбордах и используют разные идентификаторы. Воссоздайте свой таргетинг в виде аудиторий внутри плейсментов Adapty. В большинстве приложений используется один-два плейсмента (онбординг и общий внутриприложенческий триггер), поэтому пересборка обычно занимает немного времени.
Есть ли в Adapty аналог getPresentationResult?
Не в виде единственного вызова. Чтобы проверить, будет ли показан пейвол для плейсмента, вызовите Adapty.getPaywall(placementId:) и разветвляйте логику по результату. Если вызов успешен, значит для аудитории этого пользователя назначен пейвол. Если вызов завершается с ошибкой из-за отсутствия настроенного пейвола, пропустите показ и выполните резервную логику.