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

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

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

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

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

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

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

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