Оптимизация загрузки пейволов в Flutter SDK

Надёжная загрузка пейвола во Flutter решает три задачи: быстрый рендер, возврат пейвола с нужной аудиторией и корректный фолбэк при медленной сети. Правила ниже охватывают тайминг, кэширование и резервные паттерны для достижения этого.

Предполагается, что Adapty().activate() и Adapty().identify() уже выполнены. См. Порядок вызовов в Flutter SDK.

Правила и подводные камни

Делайте такНе делайте такПочему
Загружайте только тот плейсмент, который собираетесь показать.Предзагружайте все плейсменты параллельно при запуске.Массовая предзагрузка блокирует главный поток и вызывает чёрный экран во время всплеска нагрузки.
Вызывайте getPaywall после того, как атрибуция успеет разрешиться — например, через 1–2 секунды после activate или после срабатывания didUpdateProfileStream.Вызывайте getPaywall в main() до runApp.Атрибуция ещё не получена. Пейвол разрешается по дефолтной аудитории и молча обходит сегменты и персонализацию ASA.
Задайте loadTimeout и настройте резервный пейвол для каждого плейсмента.Ожидайте getPaywall бесконечно.Без таймаута пользователи с плохим соединением видят пустой экран до тех пор, пока сеть не ответит — или закрывают приложение.
См. Получение пейволов и продуктов для справки по параметрам fetchPolicy и loadTimeout, а также Плейсменты для выбора подходящего плейсмента.

Настройте приложение для работы при слабом соединении

Для рынков с устойчиво плохим качеством связи (сельские районы, транспортные узлы, регионы с проблемной маршрутизацией):

  • Используйте fetchPolicy: AdaptyPaywallFetchPolicy.returnCacheDataElseLoad при каждом запросе, кроме самого первого.
  • Настройте резервный пейвол для каждого плейсмента в дашборде Adapty.
  • Установите loadTimeout в 3–5 секунд и принимайте резервный пейвол при срабатывании таймаута.
  • Не блокируйте отображение пейвола вызовом getProfile(). Вызывайте getPaywall независимо, чтобы медленная загрузка профиля не задерживала интерфейс.