Получение пейволов Paywall Builder и их конфигурации в Flutter SDK
После того как вы создали визуальную часть пейвола с помощью нового Paywall Builder в дашборде Adapty, его можно отобразить в мобильном приложении. Первый шаг — получить пейвол, связанный с плейсментом, и его конфигурацию представления, как описано ниже.
Новый Paywall Builder работает с Flutter SDK версии 3.3.0 и выше.
Обратите внимание: этот раздел посвящён пейволам, настроенным через Paywall Builder. Если вы реализуете пейволы вручную, обратитесь к разделу Получение пейволов и продуктов для пейволов с Remote Config в мобильном приложении.
Хотите увидеть реальный пример интеграции Adapty SDK в мобильное приложение? Посмотрите наши примеры приложений — они демонстрируют полную настройку: отображение пейволов, совершение покупок и другие базовые функции.
Перед тем как начать показывать пейволы в мобильном приложении (нажмите, чтобы раскрыть)
- Создайте продукты в дашборде Adapty.
- Создайте пейвол и добавьте в него продукты в дашборде Adapty.
- Создайте плейсменты и добавьте в них пейвол в дашборде Adapty.
- Установите Adapty SDK в своё мобильное приложение.
Получение пейвола, созданного в Paywall Builder
Если вы создали пейвол с помощью Paywall Builder, вам не нужно самостоятельно заниматься его отрисовкой в коде приложения. Такой пейвол содержит и то, что должно отображаться, и то, как именно это должно выглядеть. Тем не менее вам нужно получить его идентификатор через плейсмент, конфигурацию представления и затем показать пейвол в приложении.
Для максимальной производительности важно получить пейвол и его конфигурацию представления как можно раньше — чтобы изображения успели загрузиться до того, как пользователь увидит пейвол.
Чтобы получить пейвол, используйте метод getPaywall:
try {
final paywall = await Adapty().getPaywall(placementId: "YOUR_PLACEMENT_ID", locale: "en");
// the requested paywall
} on AdaptyError catch (adaptyError) {
// handle the error
} catch (e) {
}
Параметры:
| Параметр | Обязательность | Описание |
|---|---|---|
| placementId | обязательный | Идентификатор нужного плейсмента. Это значение вы указывали при создании плейсмента в дашборде Adapty. |
| locale | опциональный по умолчанию: | Идентификатор локализации пейвола. Ожидается языковой код, состоящий из одного или двух субтегов, разделённых дефисом (-). Первый субтег — язык, второй — регион. Например: Подробнее о кодах локалей и рекомендациях по их использованию — в разделе Локализации и коды локалей. |
| fetchPolicy | по умолчанию: .reloadRevalidatingCacheData | По умолчанию SDK пытается загрузить данные с сервера, а в случае ошибки возвращает кэшированные данные. Мы рекомендуем этот вариант, поскольку он гарантирует актуальность данных. Однако если у ваших пользователей нестабильное интернет-соединение, рассмотрите вариант Обратите внимание: кэш сохраняется при перезапуске приложения и очищается только при переустановке или ручной очистке. Adapty SDK хранит пейволы локально на двух уровнях: регулярно обновляемый кэш и резервные пейволы. Для ускорения загрузки используется CDN, а на случай его недоступности — отдельный резервный сервер. Система спроектирована так, чтобы вы всегда получали актуальную версию пейволов с высокой надёжностью даже при плохом соединении. |
| loadTimeout | по умолчанию: 5 сек | Ограничивает время ожидания для этого метода. Если таймаут истёк, возвращаются кэшированные данные или локальный резервный пейвол. В редких случаях метод может завершиться чуть позже указанного значения Для Android: |
Параметры ответа:
| Параметр | Описание |
|---|---|
| Paywall | Объект AdaptyPaywall со списком идентификаторов продуктов, идентификатором пейвола, Remote Config и рядом других свойств. |
Получение конфигурации представления пейвола, созданного в Paywall Builder
Убедитесь, что в Paywall Builder включён переключатель Show on device. Если он выключен, конфигурация представления не будет доступна для получения.
После загрузки пейвола проверьте, содержит ли он ViewConfiguration — это означает, что пейвол создан с помощью Paywall Builder. Наличие ViewConfiguration определяет способ отображения пейвола. Если она есть — обрабатывайте как пейвол Paywall Builder; если нет — обрабатывайте как пейвол с Remote Config.
try {
final view = await AdaptyUI().createPaywallView(
paywall: paywall,
);
} on AdaptyError catch (e) {
// handle the error
} catch (e) {
// handle the error
}
Получив представление, отобразите пейвол.
Получение пейвола для аудитории по умолчанию (ускоренный способ)
Как правило, пейволы загружаются почти мгновенно, и ускорять этот процесс не нужно. Однако если у вас много аудиторий и пейволов, а пользователи работают с нестабильным интернетом, загрузка может занять больше времени, чем хотелось бы. В таких ситуациях лучше показать пейвол по умолчанию, чем не показывать ничего.
Для этого можно использовать метод getPaywallForDefaultAudience, который загружает пейвол указанного плейсмента для аудитории All Users. Однако рекомендованный подход — использовать метод getPaywall, как описано в разделе Получение пейвола, созданного в Paywall Builder выше.
Почему мы рекомендуем использовать getPaywall
Метод getPaywallForDefaultAudience имеет ряд существенных недостатков:
- Возможные проблемы с обратной совместимостью: если нужно показывать разные пейволы для разных версий приложения (текущей и будущих), могут возникнуть сложности. Придётся либо проектировать пейволы с учётом текущей (устаревшей) версии, либо мириться с тем, что у пользователей устаревшей версии пейволы могут не отображаться корректно.
- Потеря таргетинга: все пользователи будут видеть один и тот же пейвол, созданный для аудитории All Users, — то есть вы теряете персонализированный таргетинг (по странам, маркетинговой атрибуции и собственным пользовательским атрибутам).
Если вы готовы принять эти ограничения ради ускорения загрузки, используйте метод getPaywallForDefaultAudience следующим образом. В противном случае придерживайтесь метода getPaywall, описанного выше.
try {
final paywall = await Adapty().getPaywallForDefaultAudience(placementId: 'YOUR_PLACEMENT_ID');
} on AdaptyError catch (adaptyError) {
// handle error
} catch (e) {
// handle unknown error
}
Метод getPaywallForDefaultAudience доступен начиная с Flutter SDK версии 3.2.0.
| Параметр | Обязательность | Описание |
|---|---|---|
| placementId | обязательный | Идентификатор плейсмента. Это значение вы указывали при создании плейсмента в дашборде Adapty. |
| locale | опциональный по умолчанию: | Идентификатор локализации пейвола. Ожидается языковой код, состоящий из одного или нескольких субтегов, разделённых дефисом (-). Первый субтег — язык, второй — регион. Например: Подробнее о кодах локалей и рекомендациях по их использованию — в разделе Локализации и коды локалей. |
| fetchPolicy | по умолчанию: .reloadRevalidatingCacheData | По умолчанию SDK пытается загрузить данные с сервера, а в случае ошибки возвращает кэшированные данные. Мы рекомендуем этот вариант, поскольку он гарантирует актуальность данных. Однако если у ваших пользователей нестабильное интернет-соединение, рассмотрите вариант Обратите внимание: кэш сохраняется при перезапуске приложения и очищается только при переустановке или ручной очистке. |
Настройка пользовательских ресурсов
Чтобы кастомизировать изображения и видео в пейволе, используйте пользовательские ресурсы (custom assets).
Главные изображения и видео имеют предопределённые идентификаторы: hero_image и hero_video. В наборе пользовательских ресурсов вы обращаетесь к этим элементам по их идентификаторам и настраиваете их поведение.
Для остальных изображений и видео необходимо задать пользовательский идентификатор в дашборде Adapty.
Например, можно:
- Показывать разные изображения или видео разным пользователям.
- Показывать локальное превью-изображение, пока загружается основное удалённое изображение.
- Показывать превью-изображение перед воспроизведением видео.
Для использования этой функции обновите Flutter SDK Adapty до версии 3.8.0 или выше.
Пример того, как передать пользовательские ресурсы через простой словарь:
final customAssets = {
// Show a local image using a custom ID
'custom_image': AdaptyCustomAsset.localImageAsset(
assetId: 'assets/images/image_name.png',
),
// Show a local video with a preview image
'hero_video': AdaptyCustomAsset.localVideoAsset(
assetId: 'assets/videos/custom_video.mp4',
),
};
try {
final view = await AdaptyUI().createPaywallView(
paywall: paywall,
customAssets: <CUSTOM_ASSETS>,
preloadProducts: preloadProducts,
);
} on AdaptyError catch (e) {
// handle the error
} catch (e) {
// handle the error
}
Если ресурс не найден, пейвол вернётся к внешнему виду по умолчанию.
Настройка таймеров, заданных разработчиком
Чтобы использовать пользовательские таймеры в мобильном приложении, создайте объект, реализующий протокол AdaptyTimerResolver. Этот объект определяет, как должен отображаться каждый пользовательский таймер. При желании можно напрямую использовать словарь [String: Date], поскольку он уже соответствует этому протоколу. Пример:
try {
final view = await AdaptyUI().createPaywallView(
paywall: paywall,
customTimers: {
'CUSTOM_TIMER_6H': DateTime.now().add(const Duration(seconds: 3600 * 6)),
'CUSTOM_TIMER_NY': DateTime(2025, 1, 1), // New Year 2025
},
);
} on AdaptyError catch (e) {
// handle the error
} catch (e) {
// handle the error
}
В этом примере CUSTOM_TIMER_NY и CUSTOM_TIMER_6H — это Timer ID таймеров, заданных разработчиком в дашборде Adapty. timerResolver обеспечивает динамическое обновление каждого таймера с правильным значением. Например:
CUSTOM_TIMER_NY: время до окончания таймера, например до Нового года.CUSTOM_TIMER_6H: оставшееся время шестичасового периода, начавшегося с момента открытия пейвола пользователем.