Получение флоу и пейволов - React Native
getFlow После того как вы разработали флоу, его можно отобразить в мобильном приложении. Первый шаг — получить флоу или пейвол, связанный с плейсментом, и его конфигурацию отображения, как описано ниже.
Обратите внимание: этот раздел посвящён флоу и пейволам, созданным в билдерах Adapty. Если вы реализуете кастомные пейволы, обратитесь к теме Получение пейволов и продуктов для кастомных пейволов в мобильном приложении.
Хотите увидеть реальный пример интеграции Adapty SDK в мобильное приложение? Посмотрите наши примеры приложений, которые демонстрируют полную настройку, включая отображение пейволов, совершение покупок и другую базовую функциональность.
Прежде чем начать
Вам понадобится:
- Продукты в дашборде Adapty: Создайте продукты.
- Флоу с продуктами: Создайте его в Flow & Paywall Builder и привяжите к нему продукты.
- Плейсмент: Создайте плейсмент и назначьте ему флоу.
- Установленный SDK: Смотрите руководство по установке React Native SDK.
Получение флоу/пейвола
Если вы создали флоу или пейвол в билдере, вам не нужно беспокоиться о том, как отобразить его в коде мобильного приложения. Такой флоу или пейвол уже содержит и то, что должно быть показано, и то, как именно это должно выглядеть. Тем не менее, вам нужно получить его ID через плейсмент, конфигурацию представления, а затем отобразить его в мобильном приложении.
Получайте флоу или пейвол и создавайте его представление как можно раньше — в идеале задолго до того, как вы его покажете. Метод createFlowView загружает конфигурацию представления и в фоновом режиме начинает скачивать и кешировать изображения. Чем раньше вы его вызовете, тем больше времени будет на завершение загрузки. К моменту показа флоу или пейвола его конфигурация и изображения уже могут быть в кеше и готовы к отображению.
Чтобы прогреть несколько плейсментов сразу, вызовите preloadFlows (React Native SDK 4.3.0+). Он кэширует только JSON плейсмента, поэтому createFlowView по-прежнему загружает макет и изображения.
Чтобы получить флоу или пейвол, используйте метод getFlow:
try {
const placementId = 'YOUR_PLACEMENT_ID';
const flow = await adapty.getFlow(placementId);
// the requested flow/paywall
} catch (error) {
// handle the error
}Параметры:
| Параметр | Наличие | Описание |
|---|---|---|
| placementId | обязательный | Идентификатор нужного плейсмента. Это значение вы указывали при создании плейсмента в дашборде Adapty. |
| fetchPolicy | по умолчанию: 'reload_revalidating_cache_data' |
Однако если вы считаете, что у ваших пользователей нестабильное интернет-соединение, рассмотрите Третья политика, Обратите внимание: кеш сохраняется после перезапуска приложения и очищается только при переустановке или при ручной очистке. Adapty SDK хранит пейволы локально в двух слоях: регулярно обновляемый кеш, описанный выше, и резервные пейволы. Также для ускоренной загрузки используется CDN и отдельный резервный сервер на случай недоступности CDN. Эта система обеспечивает получение актуальных версий пейволов и надёжность даже при плохом интернет-соединении. |
| loadTimeoutMs | по умолчанию: 5 сек | Это значение ограничивает таймаут метода. Если сервер Adapty не отвечает вовремя или возвращает ошибку, SDK возвращает кешированный флоу. Если кеш пуст и сервер превысил таймаут или вернул ошибку, SDK запрашивает флоу с резервного сервера (CDN-копия, обслуживающая только аудиторию All Users плейсмента). В крайнем случае SDK возвращает флоу из вашего резервного файла. Обратите внимание: в редких случаях метод может завершиться с небольшой задержкой относительно |
Response parameters:
| Parameter | Description |
|---|---|
| Flow | Объект AdaptyFlow с идентификаторами флоу (id, variationId), названием варианта (variationName, необязательно, SDK 4.2+), именем, плейсментом, вариантами пейволов (paywalls), любыми Remote Config (remoteConfigs), а также — начиная с SDK 4.1 — флагом hasViewConfiguration. |
Получение конфигурации отображения
Обязательно опубликуйте флоу. Флоу с неопубликованными изменениями имеет статус Dirty, и его плейсмент продолжает отдавать последнюю опубликованную версию.
Если плейсмент создан в Flow & Paywall Builder или в old Paywall Builder, Adapty отрисует UI за вас. Создайте отображение с помощью createFlowView, затем покажите флоу или пейвол. Если плейсмент — это кастомный пейвол без UI в Builder, отрисуйте его самостоятельно.
В SDK 4.1 и выше флаг hasViewConfiguration на объекте флоу позволяет отличить один случай от другого ещё до создания представления:
if (flow.hasViewConfiguration) {
const view = await createFlowView(flow);
await view.present();
} else {
// Render your own screen from flow.remoteConfigs and flow.paywalls
}В версии 4.0 этот флаг отсутствует, и createFlowView выбрасывает AdaptyError для флоу без конфигурации представления.
В React Native SDK вызывайте createFlowView напрямую — предварительно получать конфигурацию представления не нужно.
После вызова view.dismiss() с параметрами по умолчанию возвращённое createFlowView представление освобождается, и повторный вызов present() на нём завершится ошибкой. Чтобы показать флоу снова, вызовите createFlowView повторно или, начиная с SDK 4.3.0, закройте флоу через dismiss({ destroy: false }), чтобы сохранить его для последующего использования.
try {
const view = await createFlowView(flow);
} catch (error) {
// handle the error
}Параметры:
| Параметр | Наличие | Описание |
|---|---|---|
| flow | обязательный | Объект AdaptyFlow для получения контроллера нужного флоу/пейвола. |
| locale | необязательный | Идентификатор локализации флоу для отображения — например, en или pt-br. Если не задан, используется en или локализация флоу по умолчанию (если en отсутствует). Требуется SDK 4.0.2 или выше. См. Локализации и коды языков. |
| customLayoutId | необязательный по умолчанию: SDK 4.1+ | Зарезервировано для возможности Flow & Paywall Builder, которая ещё не выпущена. Пока билдер не поддерживает идентификаторы макетов, любое переданное значение не будет соответствовать ни одному макету, и createFlowView вернёт ошибку AdaptyError. Оставьте параметр незаданным. |
| customTags | необязательный | Значения приложения для пользовательских тегов флоу в виде объекта, где ключи — полные имена тегов. Подробнее: Передача данных во флоу. |
| prefetchProducts | необязательный | Включите для оптимизации времени отображения продуктов на экране. При значении true AdaptyUI автоматически загрузит необходимые продукты. По умолчанию: false. |
| android.enableSafeArea | необязательный | Только для Android (игнорируется на iOS). Передаётся как вложенный объект: android: { enableSafeArea: true }. При значении true отображение флоу учитывает отступы safe area. По умолчанию true при модальном отображении (createFlowView + present()) и false для встроенного компонента AdaptyFlowView. Значение по умолчанию подходит для большинства случаев. |
Если вы используете несколько языков, узнайте, как добавить локализацию флоу и как правильно использовать коды локалей здесь.
Когда у вас есть представление, откройте флоу/пейвол.
Получение флоу или пейвола для аудитории по умолчанию для более быстрой загрузки
Как правило, флоу и пейволы загружаются почти мгновенно, поэтому беспокоиться об ускорении этого процесса не нужно. Однако если у вас много аудиторий и плейсментов, а у пользователей слабое интернет-соединение, загрузка флоу или пейвола может занять больше времени, чем хотелось бы. В таких случаях можно показывать флоу или пейвол для аудитории по умолчанию — это обеспечит плавный пользовательский опыт вместо пустого экрана.
Чтобы решить эту задачу, можно использовать метод getFlowForDefaultAudience, который получает флоу или пейвол указанного плейсмента для аудитории All Users. Однако важно понимать, что рекомендуемый подход — получать флоу или пейвол через метод getFlow, как описано в разделе Получение флоу/пейвола выше.
Почему мы рекомендуем использовать getFlow
Метод getFlowForDefaultAudience имеет ряд существенных недостатков:
- Потенциальные проблемы с обратной совместимостью: если вам нужно показывать разные пейволы для разных версий приложения (текущей и будущих), вы можете столкнуться с трудностями. Придётся либо проектировать пейволы с поддержкой текущей (устаревшей) версии, либо мириться с тем, что пользователи этой версии могут видеть нерендерящиеся пейволы.
- Потеря таргетинга: все пользователи будут видеть один и тот же пейвол, настроенный для аудитории All Users, что означает отказ от персонализированного таргетинга (в том числе по странам, маркетинговой атрибуции или собственным пользовательским атрибутам).
Если вы готовы принять эти недостатки ради более быстрой загрузки флоу или пейвола, используйте метод getFlowForDefaultAudience следующим образом. В противном случае используйте getFlow, описанный выше.
try {
const id = 'YOUR_PLACEMENT_ID';
const flow = await adapty.getFlowForDefaultAudience(id);
// the requested flow/paywall
} catch (error) {
// handle the error
}
| Параметр | Наличие | Описание |
|---|---|---|
| placementId | обязательный | Идентификатор плейсмента. Это значение вы задали при создании плейсмента в дашборде Adapty. |
| fetchPolicy | по умолчанию: 'reload_revalidating_cache_data' |
Однако если у ваших пользователей нестабильный интернет, рассмотрите вариант Третья политика, Обратите внимание, что кэш сохраняется при перезапуске приложения и очищается только при его переустановке или принудительной очистке вручную. |
Настройка ассетов
Чтобы настроить изображения и видео во флоу или пейволе, реализуйте кастомные ассеты.
Фоновые изображения и видео имеют предопределённые идентификаторы: hero_image и hero_video. В бандле кастомных ассетов вы обращаетесь к этим элементам по их идентификаторам и настраиваете их поведение.
Для остальных изображений и видео нужно задать кастомный идентификатор в дашборде Adapty.
Например, вы можете:
- Показывайте разным пользователям разные изображения или видео.
- Показывайте локальное превью-изображение, пока загружается основное изображение с сервера.
- Показывайте превью-изображение перед запуском видео.
- Показывайте медиафайлы, входящие в состав приложения, чтобы первый экран отобразился без загрузки. См. Показ медиа первого экрана из бандла приложения.
Чтобы использовать эту функцию, обновите Adapty React Native SDK до версии 3.8.0 или выше.
Вот пример того, как можно передать пользовательские ресурсы через простой словарь:
const customAssets: Record<string, AdaptyCustomAsset> = {
'custom_image': { type: 'image', relativeAssetPath: 'custom_image.png' },
'hero_video': {
type: 'video',
fileLocation: {
ios: { fileName: 'custom_video.mp4' },
android: { relativeAssetPath: 'videos/custom_video.mp4' }
}
}
};
view = await createFlowView(flow, { customAssets })
Если ресурс не найден, флоу/пейвол вернётся к внешнему виду по умолчанию.
После того как вы оформили визуальную часть пейвола в старом Paywall Builder дашборда Adapty, его можно отобразить в мобильном приложении. Первый шаг — получить пейвол, связанный с плейсментом, и его конфигурацию отображения, как описано ниже.
Пейволы, созданные в Paywall Builder для SDK 3.x, требуют React Native SDK версии 3.0 или выше.
Пожалуйста, учтите, что этот раздел относится к пейволам, настроенным с помощью Paywall Builder. Если вы используете кастомные пейволы, обратитесь к разделу Получение пейволов и продуктов для кастомных пейволов в мобильном приложении.
Хотите увидеть реальный пример интеграции Adapty SDK в мобильное приложение? Посмотрите наши примеры приложений, которые демонстрируют полную настройку, включая отображение пейволов, совершение покупок и другую базовую функциональность.
Перед тем как начать отображать пейволы в мобильном приложении (нажмите, чтобы развернуть)
- Создайте продукты в дашборде Adapty.
- Создайте пейвол и добавьте в него продукты в дашборде Adapty.
- Создайте плейсменты и добавьте в них пейвол в дашборде Adapty.
- Установите Adapty SDK в своём мобильном приложении.
Получение пейвола, созданного в Paywall Builder
Если вы создали пейвол в Paywall Builder, вам не нужно беспокоиться о его отрисовке в коде мобильного приложения для отображения пользователю. Такой пейвол содержит как то, что должно быть показано, так и то, как именно это должно быть показано. Тем не менее, вам нужно получить его ID через плейсмент, конфигурацию отображения и затем показать пейвол в мобильном приложении.
Чтобы обеспечить оптимальную производительность, важно получить пейвол и его конфигурацию отображения как можно раньше — это даст достаточно времени для загрузки изображений до того, как пейвол будет показан пользователю.
Для получения пейвола используйте метод getPaywall:
try {
const placementId = 'YOUR_PLACEMENT_ID';
const locale = 'en';
const paywall = await adapty.getPaywall(placementId, locale);
// the requested paywall
} catch (error) {
// handle the error
}Параметры:
| Параметр | Наличие | Описание |
|---|---|---|
| placementId | обязательный | Идентификатор нужного плейсмента. Это значение вы указали при создании плейсмента в дашборде Adapty. |
| locale | опциональный по умолчанию: | Идентификатор локализации пейвола. Ожидается в виде языкового кода, состоящего из одного или двух субтегов, разделённых символом минус (-). Первый субтег обозначает язык, второй — регион. Например: Подробнее о кодах локализаций и рекомендациях по их использованию — в разделе Локализации и коды локалей. |
| fetchPolicy | по умолчанию: 'reload_revalidating_cache_data' |
Однако если у ваших пользователей нестабильное интернет-соединение, рассмотрите вариант Третья политика, Обратите внимание: кэш сохраняется при перезапуске приложения и очищается только при его переустановке или вручную. Adapty SDK хранит пейволы локально на двух уровнях: регулярно обновляемый кэш (описан выше) и резервные пейволы. Для быстрой загрузки пейволов также используется CDN, а при его недоступности — отдельный резервный сервер. Такая система обеспечивает получение актуальной версии пейволов при сохранении надёжности даже при нестабильном интернет-соединении. |
| loadTimeoutMs | по умолчанию: 5 сек | Это значение ограничивает таймаут метода. Если сервер Adapty не отвечает вовремя или возвращает ошибку, SDK возвращает пейвол с резервного сервера (копия CDN, обслуживающая только аудиторию All Users плейсмента), из кэша или из вашего резервного файла. Обратите внимание: в редких случаях таймаут метода может наступить немного позже указанного в |
Параметры ответа:
| Параметр | Описание |
|---|---|
| Paywall | Объект AdaptyPaywall со списком идентификаторов продуктов, идентификатором пейвола, Remote Config и рядом других свойств. |
Получение конфигурации представления пейвола, созданного в Paywall Builder
Убедитесь, что в Paywall Builder включён переключатель Show on device. Если эта опция не активирована, конфигурация представления не будет доступна для получения.
После получения пейвола проверьте, содержит ли он ViewConfiguration — это означает, что пейвол был создан в Paywall Builder. Это поможет вам определить, как отображать пейвол. Если ViewConfiguration присутствует, обрабатывайте его как пейвол Paywall Builder; если нет — обработайте его как кастомный пейвол.
В React Native SDK напрямую вызывайте метод createPaywallView, не извлекая конфигурацию представления вручную.
Результат метода createPaywallView можно использовать только один раз. Если он нужен снова, вызовите createPaywallView заново. Повторный вызов без пересоздания может привести к ошибке AdaptyUIError.viewAlreadyPresented.
// for the Adapty SDK < 3.14 – import {createPaywallView} from 'react-native-adapty/dist/ui';
if (paywall.hasViewConfiguration) {
try {
const view = await createPaywallView(paywall);
} catch (error) {
// handle the error
}
} else {
//use your custom logic
}Параметры:
| Параметр | Обязательность | Описание |
|---|---|---|
| paywall | обязательный | Объект AdaptyPaywall для получения контроллера нужного пейвола. |
| customTags | необязательный | Словарь пользовательских тегов и их значений. Пользовательские теги служат плейсхолдерами в содержимом пейвола и динамически заменяются конкретными строками для персонализации контента. Подробнее см. в разделе о пользовательских тегах в Paywall Builder. |
| prefetchProducts | необязательный | Включите для оптимизации времени отображения продуктов на экране. При значении true AdaptyUI автоматически загрузит необходимые продукты. По умолчанию: false. |
Если вы поддерживаете несколько языков, добавьте локализацию в ваш пейвол. Коды для использования см. в разделе Локализации и коды локалей.
После того как у вас есть представление, отобразите пейвол.
Получите пейвол для аудитории по умолчанию, чтобы загрузить его быстрее
Как правило, пейволы загружаются почти мгновенно, и беспокоиться об ускорении этого процесса не нужно. Однако если у вас много аудиторий и пейволов, а у пользователей слабое интернет-соединение, загрузка пейвола может занять больше времени, чем хотелось бы. В таких ситуациях имеет смысл показывать пейвол по умолчанию — это обеспечит плавный пользовательский опыт вместо полного отсутствия пейвола.
Чтобы решить эту задачу, используйте метод getPaywallForDefaultAudience, который получает пейвол указанного плейсмента для аудитории All Users. Однако важно понимать, что рекомендуемый подход — получать пейвол через метод getPaywall, как описано в разделе Получение информации о пейволе выше.
Почему мы рекомендуем использовать getPaywall
Метод getPaywallForDefaultAudience имеет ряд существенных недостатков:
- Возможные проблемы с обратной совместимостью: если нужно показывать разные пейволы для разных версий приложения (текущей и будущих), могут возникнуть сложности. Придётся либо проектировать пейволы с поддержкой текущей (устаревшей) версии, либо смириться с тем, что у пользователей этой версии пейволы могут не отображаться.
- Потеря таргетинга: все пользователи будут видеть один и тот же пейвол, настроенный для аудитории All Users, — это означает отказ от персонализированного таргетинга (в том числе по странам, маркетинговой атрибуции или собственным пользовательским атрибутам).
Если вас устраивают эти ограничения ради более быстрой загрузки пейвола, используйте метод getPaywallForDefaultAudience следующим образом. В противном случае используйте getPaywall, описанный выше.
try {
const id = 'YOUR_PLACEMENT_ID';
const locale = 'en';
const paywall = await adapty.getPaywallForDefaultAudience(id, locale);
// the requested paywall
} catch (error) {
// handle the error
}Метод getPaywallForDefaultAudience доступен начиная с версии React Native SDK 2.11.2.
| Параметр | Наличие | Описание |
|---|---|---|
| placementId | обязательный | Идентификатор плейсмента. Это значение вы указывали при создании плейсмента в дашборде Adapty. |
| locale | необязательный по умолчанию: | Идентификатор локализации пейвола. Ожидается языковой код, состоящий из одного или нескольких подтегов, разделённых символом минус (-). Первый подтег обозначает язык, второй — регион. Пример: Подробнее о кодах локализаций и рекомендуемых подходах к их использованию см. в разделе Локализации и коды локалей. |
| fetchPolicy | по умолчанию: 'reload_revalidating_cache_data' |
Если же у ваших пользователей нестабильное интернет-соединение, рассмотрите вариант Третья политика, Обратите внимание: кэш сохраняется при перезапуске приложения и очищается только при его переустановке или ручной очистке. |
Настройка ресурсов
Чтобы настроить изображения и видео на пейволе, используйте пользовательские ресурсы.
У hero-изображений и видео есть предопределённые идентификаторы: hero_image и hero_video. В бандле пользовательских ресурсов вы обращаетесь к этим элементам по их идентификаторам и настраиваете их поведение.
Для остальных изображений и видео необходимо задать пользовательский идентификатор в дашборде Adapty.
Например, вы можете:
- Показывать разные изображения или видео разным пользователям.
- Показывать локальное превью-изображение, пока загружается основное удалённое изображение.
- Показывать превью-изображение перед запуском видео.
Чтобы использовать эту функцию, обновите Adapty React Native SDK до версии 3.8.0 или выше.
Вот пример того, как можно передать кастомные ресурсы через простой словарь:
const customAssets: Record<string, AdaptyCustomAsset> = {
'custom_image': { type: 'image', relativeAssetPath: 'custom_image.png' },
'hero_video': {
type: 'video',
fileLocation: {
ios: { fileName: 'custom_video.mp4' },
android: { relativeAssetPath: 'videos/custom_video.mp4' }
}
}
};
view = await createPaywallView(paywall, { customAssets })
Если ресурс не найден, пейвол вернётся к внешнему виду по умолчанию.