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

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

Tip

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

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

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

См. Получение пейволов и продуктов для справки по параметрам fetchPolicy и loadTimeout, а также Плейсменты для выбора подходящего плейсмента.

Показ медиа первого экрана из бандла приложения

Флоу загружает изображения и видео из Adapty. Чтобы медиа первого экрана отображалось мгновенно, раздавайте его из бандла приложения. Это удобно, если вы уже поставляете такие медиафайлы — например, визуальные элементы существующего нативного онбординга.

  1. В Flow & Paywall Builder задайте пользовательский медиа-ID для изображения или видео. Загруженный там файл остаётся в качестве резервного.
  2. Добавьте файл в ресурсы Flutter и укажите его в разделе assets файла pubspec.yaml.
  3. При создании представления флоу передайте bundled-файл для этого ID в customAssets:
// "welcome_video" is the custom media ID set in the Flow & Paywall Builder
final bundledAssets = {
  'welcome_video': AdaptyCustomAsset.localVideoAsset(
    assetId: 'assets/videos/welcome.mp4',
  ),
};

try {
  final view = await AdaptyUI().createFlowView(
    flow: flow,
    customAssets: bundledAssets,
  );
} on AdaptyError catch (e) {
  // handle the error
}

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

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

Полный справочник по customAssets см. в разделе Настройка ассетов.

Настройка для нестабильного подключения

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

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