Оптимизация загрузки флоу и пейволов в Flutter SDK
Надёжная загрузка флоу или пейвола во Flutter решает три задачи: быстрый рендеринг, возврат вариации, нацеленной на нужную аудиторию, и корректный резервный сценарий при медленной сети. Правила ниже охватывают тайминг, кэширование и резервные паттерны для достижения этих целей.
Подразумевается, что Adapty().activate() и Adapty().identify() уже завершились. См. Порядок вызовов в Flutter SDK.
Правила и подводные камни
| Делайте это | Не делайте это | Почему |
|---|---|---|
| Загружайте плейсмент непосредственно перед показом. | Не загружайте все плейсменты одновременно при запуске. | Массовая загрузка блокирует основной поток и вызывает чёрный экран во время пакетного запроса. |
Вызывайте getFlow после того, как атрибуция успела разрешиться — например, через 1–2 секунды после activate или после срабатывания didUpdateProfileStream. | Не вызывайте getFlow в main() до runApp. | Атрибуция ещё не загружена. Флоу разрешается по аудитории по умолчанию и незаметно обходит сегменты и персонализацию ASA. |
Задайте loadTimeout и настройте резервный пейвол для каждого плейсмента. | Не ждите ответа getFlow бесконечно. | Без таймаута пользователи с медленным соединением видят пустой экран до тех пор, пока сеть не ответит — или закрывают приложение. |
См. Получение пейволов и продуктов для справки по параметрам fetchPolicy и loadTimeout, а также Плейсменты для выбора подходящего плейсмента.
Показ медиа первого экрана из бандла приложения
Флоу загружает изображения и видео из Adapty. Чтобы медиа первого экрана отображалось мгновенно, раздавайте его из бандла приложения. Это удобно, если вы уже поставляете такие медиафайлы — например, визуальные элементы существующего нативного онбординга.
- В Flow & Paywall Builder задайте пользовательский медиа-ID для изображения или видео. Загруженный там файл остаётся в качестве резервного.
- Добавьте файл в ресурсы Flutter и укажите его в разделе
assetsфайлаpubspec.yaml. - При создании представления флоу передайте 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независимо, чтобы медленный профиль не задерживал отрисовку интерфейса.