Получение флоу и пейволов — Android
getFlow После того как вы создали флоу или пейвол в Paywall Builder, его можно отобразить в мобильном приложении. Первый шаг — получить флоу или пейвол, связанный с плейсментом, и его конфигурацию представления, как описано ниже.
Хотите увидеть реальный пример интеграции Adapty SDK в мобильное приложение? Посмотрите наши примеры приложений — они демонстрируют полную настройку: отображение пейволов, совершение покупок и другие базовые функции.
Перед тем как начать отображать флоу в мобильном приложении (нажмите, чтобы развернуть)
- Создайте продукты в дашборде Adapty.
- Создайте флоу/пейвол и добавьте в него продукты в дашборде Adapty.
- Создайте плейсменты и добавьте в них флоу/пейвол в дашборде Adapty.
- Установите SDK Adapty в своём мобильном приложении.
Получение флоу/пейвола
Если вы создали флоу или пейвол с помощью Flow Builder или Paywall Builder, вам не нужно беспокоиться о его отрисовке в коде мобильного приложения для показа пользователю. Такой флоу или пейвол уже содержит и то, что должно отображаться, и то, как именно это должно выглядеть. Тем не менее вам нужно получить его ID через плейсмент, настроить конфигурацию представления и затем показать его в мобильном приложении. Чтобы обеспечить оптимальную производительность, важно как можно раньше получить флоу или пейвол и его конфигурацию отображения, чтобы изображения успели загрузиться до того, как пользователь их увидит.
Для получения флоу или пейвола используйте метод getFlow:
Параметры:
| Параметр | Наличие | Описание |
|---|---|---|
| placementId | обязательный | Идентификатор нужного плейсмента. Это значение вы указывали при создании плейсмента в дашборде Adapty. |
| fetchPolicy | по умолчанию: .reloadRevalidatingCacheData | По умолчанию SDK пытается загрузить данные с сервера и возвращает кешированные данные в случае сбоя. Рекомендуем именно этот вариант — так пользователи всегда получают актуальные данные. Однако если у ваших пользователей нестабильный интернет, рассмотрите вариант Обратите внимание: кеш сохраняется при перезапуске приложения и очищается только при его переустановке или вручную. Adapty SDK хранит флоу и пейволы локально в двух слоях: регулярно обновляемый кеш, описанный выше, и резервные пейволы. Для ускорения загрузки используется CDN, а в случае его недоступности — отдельный резервный сервер. Такая архитектура обеспечивает получение актуальной версии данных и надёжность даже при слабом интернет-соединении. |
| loadTimeout | по умолчанию: 5 сек | Ограничивает время ожидания для этого метода. По истечении таймаута возвращаются кешированные данные или локальный резервный пейвол. Обратите внимание: в редких случаях метод может завершиться с небольшой задержкой относительно значения Для Android: объект |
| Параметры ответа: |
| Параметр | Описание |
|---|---|
| Flow | Объект AdaptyFlow, содержащий плейсмент, идентификаторы (id, variationId), название, Remote Config и флаг hasViewConfiguration, указывающий, включает ли флоу конфигурацию отображения. Чтобы получить продукты для предзагрузки, кастомного UI или программных проверок, вызовите getPaywallProducts(flow). |
Получение конфигурации отображения
После получения флоу или пейвола проверьте, содержит ли он конфигурацию отображения, с помощью flow.hasViewConfiguration. Этот флаг показывает, каким способом плейсмент был создан в дашборде Adapty:
true— плейсмент создан в Flow Builder (флоу) или Paywall Builder (пейвол). Adapty отрисовывает интерфейс за вас. Продолжайте выполнять шаги ниже, чтобы получить конфигурацию представления и показать флоу или пейвол.false— плейсмент является пользовательским пейволом без интерфейса Builder. Обработайте его как пейвол с Remote Config.
Убедитесь, что в Flow Builder включён переключатель Show on device. Если эта опция не активирована, конфигурация представления не будет доступна для получения.
Если вы используете несколько языков, узнайте, как добавить локализацию в Builder и как правильно использовать коды локалей здесь.
После загрузки отобразите флоу или пейвол.
Получите флоу или пейвол для аудитории по умолчанию, чтобы ускорить загрузку
Как правило, флоу и пейволы загружаются почти мгновенно, поэтому беспокоиться об ускорении этого процесса не нужно. Однако если у вас много аудиторий и плейсментов, а пользователи работают при слабом интернет-соединении, загрузка флоу или пейвола может занять больше времени, чем хотелось бы. В таких случаях имеет смысл показывать флоу или пейвол для аудитории по умолчанию — это обеспечит плавный пользовательский опыт вместо пустого экрана.
Чтобы решить эту проблему, используйте метод getFlowForDefaultAudience, который получает флоу или пейвол указанного плейсмента для аудитории All Users. Однако важно понимать, что рекомендуемый подход — получать флоу или пейвол через метод getFlow, как описано в разделе Получение флоу/пейвола выше.
Почему мы рекомендуем использовать getFlow
Метод getFlowForDefaultAudience имеет ряд существенных недостатков:
- Возможные проблемы с обратной совместимостью: если вам нужно показывать разные флоу для разных версий приложения (текущей и будущих), могут возникнуть сложности. Придётся либо проектировать флоу с поддержкой текущей (устаревшей) версии, либо мириться с тем, что пользователи на текущей (устаревшей) версии могут столкнуться с проблемами при отображении флоу.
- Потеря таргетинга: все пользователи будут видеть один и тот же флоу, настроенный для аудитории All Users, — это означает отказ от персонализированного таргетинга (в том числе по странам, маркетинговой атрибуции или вашим собственным кастомным атрибутам).
Если вы готовы принять эти недостатки ради более быстрой загрузки флоу или пейвола, используйте метод
getFlowForDefaultAudienceследующим образом. В противном случае используйтеgetFlow, описанный выше.
| Параметр | Наличие | Описание |
|---|---|---|
| placementId | обязательный | Идентификатор плейсмента. Это значение вы указали при создании плейсмента в дашборде Adapty. |
| fetchPolicy | по умолчанию: .reloadRevalidatingCacheData | По умолчанию SDK пытается загрузить данные с сервера и возвращает кэшированные данные в случае сбоя. Мы рекомендуем этот вариант, поскольку он гарантирует, что пользователи всегда получают самые актуальные данные. Однако если у ваших пользователей нестабильное интернет-соединение, рассмотрите использование Обратите внимание: кэш сохраняется после перезапуска приложения и очищается только при переустановке или вручную. |
Настройка ассетов
Чтобы настроить изображения и видео в своём флоу или пейволе, используйте пользовательские ассеты.
Главные изображения и видео имеют предопределённые идентификаторы: hero_image и hero_video. В бандле пользовательских ассетов вы обращаетесь к этим элементам по их идентификаторам и настраиваете их поведение.
Для остальных изображений и видео нужно задать пользовательский идентификатор в дашборде Adapty.
Например, вы можете:
- Показывать разное изображение или видео отдельным пользователям.
- Показывать локальное превью-изображение, пока загружается основное удалённое изображение.
- Показывать превью-изображение перед запуском видео. Вот пример того, как передавать пользовательские ресурсы через простой словарь:
val customAssets = AdaptyCustomAssets.of(
"hero_image" to
AdaptyCustomImageAsset.remote(
url = "https://example.com/image.jpg",
preview = AdaptyCustomImageAsset.file(
FileLocation.fromAsset("images/hero_image_preview.png"),
)
),
"hero_video" to
AdaptyCustomVideoAsset.file(
FileLocation.fromResId(requireContext(), R.raw.custom_video),
preview = AdaptyCustomImageAsset.file(
FileLocation.fromResId(requireContext(), R.drawable.video_preview),
),
),
)
val flowView = AdaptyUI.getFlowView(
activity,
flowConfiguration,
products,
eventListener,
insets,
customAssets,
)Если ресурс не найден, флоу вернётся к внешнему виду по умолчанию.
Для видео можно дополнительно передать resolution, чтобы заранее зарезервировать место в макете и задать соотношение сторон (width / height) до загрузки видео:
AdaptyCustomVideoAsset.file(
FileLocation.fromResId(requireContext(), R.raw.custom_video),
preview = AdaptyCustomImageAsset.file(
FileLocation.fromResId(requireContext(), R.drawable.video_preview),
),
resolution = AdaptyCustomVideoAsset.Resolution(width = 1080, height = 1920),
)После того как вы разработали визуальную часть пейвола в новом Paywall Builder на дашборде Adapty, вы можете отобразить его в своём мобильном приложении. Первый шаг — получить пейвол, связанный с плейсментом, и его конфигурацию отображения, как описано ниже.
Новый Paywall Builder работает с Android SDK версии 3.0 и выше.
Пожалуйста, обратите внимание, что эта тема посвящена пейволам, настроенным с помощью Paywall Builder. Если вы реализуете пейволы вручную, обратитесь к теме Получение пейволов и продуктов для Remote Config пейволов в вашем мобильном приложении.
Хотите увидеть реальный пример интеграции Adapty SDK в мобильное приложение? Посмотрите наши примеры приложений — они демонстрируют полную настройку: отображение пейволов, совершение покупок и другие базовые функции.
Прежде чем начать отображать пейволы в вашем мобильном приложении (нажмите, чтобы раскрыть)
- Создайте продукты в дашборде Adapty.
- Создайте пейвол и добавьте в него продукты в дашборде Adapty.
- Создайте плейсменты и добавьте в них пейвол в дашборде Adapty.
- Установите Adapty SDK в своём мобильном приложении.
Получение пейвола, созданного в Paywall Builder
Если вы создали пейвол с помощью Paywall Builder, вам не нужно беспокоиться о его отрисовке в коде мобильного приложения — пейвол уже содержит всю информацию о том, что и как должно отображаться. Тем не менее, вам нужно получить его ID через плейсмент, конфигурацию отображения, а затем показать пейвол в мобильном приложении. Для оптимальной производительности важно получать пейвол и его конфигурацию вида как можно раньше, чтобы изображения успели загрузиться до того, как пейвол будет показан пользователю.
Для получения пейвола используйте метод getPaywall:
Параметры:
| Параметр | Наличие | Описание |
|---|---|---|
| placementId | обязательный | Идентификатор нужного плейсмента. Это значение вы указали при создании плейсмента в дашборде Adapty. |
| locale | необязательный по умолчанию: | Идентификатор локализации пейвола. Ожидается языковой код, состоящий из одного или двух подтегов, разделённых символом минус (-). Первый подтег — язык, второй — регион. Пример: Подробнее о кодах локалей и рекомендациях по их использованию см. в разделе Локализации и коды локалей. |
| fetchPolicy | по умолчанию: .reloadRevalidatingCacheData | По умолчанию SDK пытается загрузить данные с сервера и возвращает кешированные данные в случае ошибки. Мы рекомендуем именно этот вариант — он гарантирует, что пользователи всегда получают актуальные данные. Однако если у ваших пользователей нестабильное интернет-соединение, рассмотрите использование Обратите внимание: кеш сохраняется при перезапуске приложения и очищается только при его переустановке или ручной очистке. Adapty SDK хранит пейволы локально в двух слоях: описанный выше регулярно обновляемый кеш и резервные пейволы. Для ускорения загрузки пейволов также используется CDN, а на случай недоступности CDN — отдельный резервный сервер. Эта система гарантирует, что вы всегда получаете актуальную версию пейволов, сохраняя надёжность даже при нестабильном интернете. |
| loadTimeout | по умолчанию: 5 сек | Ограничивает время ожидания для этого метода. По истечении таймаута будут возвращены кешированные данные или локальный резервный вариант. Обратите внимание: в редких случаях метод может завершиться с небольшой задержкой относительно значения Для Android: создать |
| Параметры ответа: |
| Параметр | Описание |
|---|---|
| Paywall | Объект AdaptyPaywall со списком идентификаторов продуктов, идентификатором пейвола, Remote Config и рядом других свойств. |
Получение конфигурации отображения пейвола, созданного в Paywall Builder
Убедитесь, что в Paywall Builder включён переключатель Show on device. Если эта опция отключена, конфигурация отображения будет недоступна для получения.
После получения пейвола проверьте, содержит ли он ViewConfiguration — это означает, что он был создан с помощью Paywall Builder. Это подскажет вам, как отображать пейвол. Если ViewConfiguration присутствует, обработайте его как пейвол Paywall Builder; если нет — обработайте его как пейвол с Remote Config.
Если вы используете несколько языков, узнайте, как добавить локализацию в Paywall Builder и как правильно использовать коды локалей здесь.
После загрузки покажите пейвол.
Получите пейвол для аудитории по умолчанию, чтобы ускорить загрузку
Как правило, пейволы загружаются почти мгновенно, поэтому беспокоиться об ускорении этого процесса не нужно. Однако если у вас много аудиторий и пейволов, а пользователи работают при слабом интернет-соединении, загрузка пейвола может занять больше времени, чем хотелось бы. В таких случаях имеет смысл показывать пейвол по умолчанию — это обеспечит плавный пользовательский опыт вместо того, чтобы не показывать пейвол вовсе.
Чтобы решить эту проблему, можно использовать метод getPaywallForDefaultAudience, который получает пейвол указанного плейсмента для аудитории All Users. Однако важно понимать, что рекомендуемый подход — получать пейвол с помощью метода getPaywall, как описано в разделе Получение информации о пейволе выше.
Почему мы рекомендуем использовать getPaywall
Метод getPaywallForDefaultAudience имеет ряд существенных недостатков:
- Потенциальные проблемы с обратной совместимостью: если вам нужно показывать разные пейволы для разных версий приложения (текущей и будущих), могут возникнуть сложности. Придётся либо проектировать пейволы с учётом текущей (устаревшей) версии, либо смириться с тем, что пользователи на ней могут столкнуться с проблемами неотображаемых пейволов.
- Потеря таргетинга: все пользователи будут видеть один и тот же пейвол, настроенный для аудитории All Users, — это означает потерю персонализированного таргетинга (в том числе по странам, маркетинговой атрибуции или вашим собственным пользовательским атрибутам).
Если вы готовы принять эти недостатки ради более быстрого получения пейволов, используйте метод
getPaywallForDefaultAudienceследующим образом. В противном случае используйтеgetPaywall, описанный выше.
Метод getPaywallForDefaultAudience доступен начиная с Android SDK 2.11.3
| Параметр | Наличие | Описание |
|---|---|---|
| placementId | обязательный | Идентификатор плейсмента. Это значение вы задаёте при создании плейсмента в дашборде Adapty. |
| locale | опциональный по умолчанию: | Идентификатор локализации пейвола. Ожидается код языка, состоящий из одного или нескольких подтегов, разделённых символом минус (-). Первый подтег обозначает язык, второй — регион. Пример: Подробнее о кодах локалей и рекомендациях по их использованию см. в разделе Локализации и коды локалей. |
| fetchPolicy | по умолчанию: .reloadRevalidatingCacheData | По умолчанию SDK пытается загрузить данные с сервера и возвращает кешированные данные в случае ошибки. Мы рекомендуем этот вариант, поскольку он гарантирует, что пользователи всегда получают актуальные данные. Однако если у ваших пользователей нестабильное интернет-соединение, рассмотрите вариант Обратите внимание: кеш сохраняется при перезапуске приложения и очищается только при его переустановке или вручную. |
Настройка ассетов
Чтобы настроить изображения и видео в пейволе, используйте кастомные ассеты.
У hero-изображений и видео есть предустановленные ID: hero_image и hero_video. В пакете кастомных ассетов вы обращаетесь к этим элементам по их ID и настраиваете их поведение.
Для остальных изображений и видео нужно задать кастомный ID в дашборде Adapty.
Например, вы можете:
- Показывать разные изображения или видео разным пользователям.
- Показывать локальное превью, пока загружается основное удалённое изображение.
- Показывать превью перед воспроизведением видео.
Чтобы использовать эту функцию, обновите Adapty Android SDK до версии 3.7.0 или выше.
Вот пример того, как можно передавать пользовательские ресурсы через простой словарь:
val customAssets = AdaptyCustomAssets.of(
"hero_image" to
AdaptyCustomImageAsset.remote(
url = "https://example.com/image.jpg",
preview = AdaptyCustomImageAsset.file(
FileLocation.fromAsset("images/hero_image_preview.png"),
)
),
"hero_video" to
AdaptyCustomVideoAsset.file(
FileLocation.fromResId(requireContext(), R.raw.custom_video),
preview = AdaptyCustomImageAsset.file(
FileLocation.fromResId(requireContext(), R.drawable.video_preview),
),
),
)
val paywallView = AdaptyUI.getPaywallView(
activity,
viewConfiguration,
products,
eventListener,
insets,
customAssets,
)Если ассет не найден, пейвол вернётся к внешнему виду по умолчанию.