Миграция с Superwall на Adapty | Документация Adapty

Миграция с Superwall

Большинство миграций с Superwall на Adapty занимают около двух часов. Вы заменяете SDK, направляете серверные уведомления стора на Adapty и выпускаете новую версию приложения. Платные подписчики сохраняют доступ — Adapty восстанавливает его из чеков App Store и Google Play при первом запуске.

Ваши подписчики мигрируют автоматически

Все пользователи, когда-либо активировавшие подписку, переходят на Adapty сразу после открытия новой версии приложения с SDK Adapty. Валидация статуса подписки и доступ к премиум-функциям восстанавливаются автоматически.

Структура руководства

Миграция состоит из шести шагов:

  1. Сопоставьте концепции Superwall с Adapty
  2. Установите SDK Adapty
  3. Замените SDK-вызовы
  4. Переключите серверные уведомления App Store и Google Play
  5. Протестируйте и выпустите релиз
  6. (Опционально) Импортируйте исторические данные

Сопоставьте концепции Superwall с Adapty

Большинство концепций Superwall имеют прямой аналог в Adapty:

SuperwallAdaptyЧто меняется
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-тестов зависят от этих уведомлений:

Если вы хотите запускать 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:) и разветвляйте логику по результату. Если вызов успешен, значит для аудитории этого пользователя назначен пейвол. Если вызов завершается с ошибкой из-за отсутствия настроенного пейвола, пропустите показ и выполните резервную логику.