Получение пейволов и продуктов для пейволов с Remote Config в Capacitor SDK
Прежде чем отображать Remote Config и кастомные пейволы, вам нужно получить информацию о них. Обратите внимание, что этот раздел посвящён Remote Config и кастомным пейволам. Чтобы узнать, как получить флоу или пейволы, настроенные в Flow Builder или Paywall Builder, обратитесь к статье Получение флоу Flow Builder и пейволов Paywall Builder и их конфигурации.
Хотите увидеть реальный пример интеграции Adapty SDK в мобильное приложение? Посмотрите наши примеры приложений — они демонстрируют полную настройку: отображение пейволов, совершение покупок и другие базовые функции.
Прежде чем начать получать флоу и продукты в мобильном приложении (нажмите, чтобы развернуть)
-
Создайте продукты в дашборде Adapty.
-
Создайте флоу или пейвол и добавьте в него продукты в дашборде Adapty.
-
Создайте плейсменты и добавьте в них флоу или пейвол в дашборде Adapty.
-
Установите Adapty SDK в своём мобильном приложении.
Получение информации о флоу
В Adapty продукт объединяет в себе продукты из App Store и Google Play. Эти кроссплатформенные продукты интегрируются во флоу и пейволы, что позволяет отображать их в конкретных плейсментах мобильного приложения.
Чтобы отобразить продукты, необходимо получить объект AdaptyFlow из одного из ваших плейсментов с помощью метода getFlow.
Не указывайте product ID в коде. Единственный ID, который стоит хардкодить — это ID плейсмента. Флоу настраиваются удалённо, поэтому количество продуктов и доступных офферов может меняться в любой момент. Ваше приложение должно обрабатывать эти изменения динамически — если сегодня флоу возвращает два продукта, а завтра три, отображайте все из них без изменений в коде.
try {
const flow = await adapty.getFlow({
placementId: 'YOUR_PLACEMENT_ID',
params: {
fetchPolicy: 'reload_revalidating_cache_data', // Load from server, fallback to cache
loadTimeoutMs: 5000 // 5 second timeout
}
});
// the requested flow
} catch (error) {
console.error('Failed to fetch flow:', error);
}
| Параметр | Наличие | Описание |
|---|---|---|
| placementId | обязательный | Идентификатор плейсмента. Это значение вы указали при создании плейсмента в дашборде Adapty. |
| params.fetchPolicy | опциональный по умолчанию: | По умолчанию SDK пытается загрузить данные с сервера и возвращает кэшированные данные в случае сбоя. Мы рекомендуем этот вариант, так как он гарантирует, что пользователи всегда получают актуальные данные. Однако если у ваших пользователей нестабильное интернет-соединение, рассмотрите использование Обратите внимание, что кэш сохраняется при перезапуске приложения и очищается только при переустановке или ручной очистке. Adapty SDK хранит флоу и пейволы в двух слоях: регулярно обновляемый кэш, описанный выше, и резервные пейволы. Также используется CDN для более быстрой загрузки флоу и пейволов, а также отдельный резервный сервер на случай недоступности CDN. Эта система обеспечивает получение актуальной версии флоу и надёжность даже при слабом интернет-соединении. |
| params.loadTimeoutMs | опциональный по умолчанию: 5000 мс | Это значение ограничивает таймаут (в миллисекундах) для данного метода. По истечении таймаута будут возвращены кэшированные данные или локальный резервный вариант. Обратите внимание, что в редких случаях метод может завершиться с небольшой задержкой относительно значения, указанного в |
В версии 4 метод getFlow больше не принимает параметр locale. Для кастомных пейволов все доступные локали возвращаются в Remote Config флоу (flow.remoteConfigs) — выберите ту, которая соответствует языку устройства или настройкам приложения.
Не хардкодьте ID продуктов! Поскольку флоу настраиваются удалённо, доступные продукты, их количество и специальные предложения (например, бесплатные пробные периоды) могут меняться со временем. Убедитесь, что ваш код учитывает эти сценарии.
Например, если изначально вы получаете 2 продукта, приложение должно отображать их. Но если позднее вы получите 3 продукта, приложение должно показать все 3 без каких-либо изменений в коде. Единственное, что нужно хардкодить, — это ID плейсмента.
Параметры ответа:
| Параметр | Описание |
|---|---|
| Flow | Объект AdaptyFlow, содержащий плейсмент, идентификаторы (id, variationId), название, вариации пейвола (paywalls) и массив remoteConfigs (по одной записи на каждую настроенную локаль). Чтобы получить продукты для флоу, вызовите getPaywallProducts({ flow }). |
Получение продуктов
После того как вы получили флоу, можно запросить массив продуктов, соответствующих ему:
try {
const products = await adapty.getPaywallProducts({ flow });
// the requested products list
} catch (error) {
console.error('Failed to fetch products:', error);
}Параметры ответа:
| Параметр | Описание |
|---|---|
| Products | Список объектов AdaptyPaywallProduct с идентификатором продукта, названием, ценой, валютой, длительностью подписки и рядом других свойств. |
При реализации собственного дизайна пейвола вам, скорее всего, понадобятся свойства объекта AdaptyPaywallProduct. Ниже приведены наиболее часто используемые свойства; полный список доступных свойств см. в связанной документации. | |
| Свойство | Описание |
| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Title | Чтобы отобразить название продукта, используйте product.localizedTitle. Обратите внимание: локализация основана на стране стора, выбранной пользователем, а не на локали устройства. |
| Price | Чтобы отобразить цену в локализованном формате, используйте product.price?.localizedString. Локализация основана на локали устройства. Также можно получить цену как число через product.price?.amount — значение будет в местной валюте. Для получения символа валюты используйте product.price?.currencySymbol. |
| Subscription Period | Чтобы отобразить период (например, неделя, месяц, год и т. д.), используйте product.subscription?.localizedSubscriptionPeriod. Локализация основана на локали устройства. Для программного получения периода подписки используйте product.subscription?.subscriptionPeriod. Оттуда можно обратиться к свойству unit, чтобы получить единицу периода ('day', 'week', 'month', 'year' или 'unknown'). Свойство numberOfUnits даёт количество единиц периода. Например, для квартальной подписки в unit будет 'month', а в numberOfUnits — 3. |
| Introductory Offer | Чтобы показать значок или другой индикатор наличия introductory offer у подписки, проверьте свойство product.subscription?.offer?.phases. Это список, который может содержать до двух фаз скидки: фазу бесплатного пробного периода и фазу вводной цены. Каждый объект фазы содержит следующие полезные свойства:• paymentMode: строка со значениями 'free_trial', 'pay_as_you_go', 'pay_up_front' и 'unknown'. Бесплатные пробные периоды имеют тип 'free_trial'.• price: цена со скидкой в виде числа. Для бесплатных пробных периодов ожидайте 0.• localizedNumberOfPeriods: строка, локализованная по локали устройства, описывающая длительность предложения. Например, для трёхдневного пробного периода в этом поле будет '3 days'.• subscriptionPeriod: позволяет получить отдельные детали периода предложения — работает так же, как описано в предыдущем разделе.• localizedSubscriptionPeriod: отформатированный период подписки скидки для локали пользователя. |
Ускорьте загрузку флоу с помощью флоу для аудитории по умолчанию
Как правило, флоу загружаются почти мгновенно, так что беспокоиться об этом не нужно. Однако если у вас много аудиторий и плейсментов, а соединение у пользователя слабое, загрузка флоу может занять больше времени, чем хотелось бы. В таких случаях лучше показать флоу по умолчанию, чтобы обеспечить плавный пользовательский опыт, а не оставлять экран пустым.
Чтобы решить эту проблему, можно использовать метод getFlowForDefaultAudience, который получает флоу указанного плейсмента для аудитории All Users. Однако важно понимать, что рекомендуемый подход — получать флоу с помощью метода getFlow, как описано в разделе Получение информации о флоу выше.
Почему мы рекомендуем использовать getFlow
Метод getFlowForDefaultAudience имеет ряд существенных недостатков:
- Потенциальные проблемы с обратной совместимостью: если вам нужно показывать разные флоу для разных версий приложения (текущей и будущих), могут возникнуть сложности. Придётся либо проектировать флоу, совместимые с текущей (устаревшей) версией, либо мириться с тем, что у пользователей с текущей (устаревшей) версией флоу могут не отображаться.
- Потеря таргетинга: все пользователи будут видеть один и тот же флоу, настроенный для аудитории All Users, — то есть вы теряете персонализированный таргетинг (в том числе по странам, маркетинговой атрибуции или собственным пользовательским атрибутам).
Если вас устраивают эти недостатки ради более быстрой загрузки флоу, используйте метод
getFlowForDefaultAudience, как описано ниже. В противном случае используйтеgetFlow, описанный выше.
try {
const flow = await adapty.getFlowForDefaultAudience({
placementId: 'YOUR_PLACEMENT_ID',
params: {
fetchPolicy: 'reload_revalidating_cache_data' // Load from server, fallback to cache
}
});
// the requested flow
} catch (error) {
console.error('Failed to fetch default audience flow:', error);
}
| Параметр | Наличие | Описание |
|---|---|---|
| placementId | обязательный | Идентификатор плейсмента. Это значение вы указываете при создании плейсмента в дашборде Adapty. |
| params.fetchPolicy | опциональный по умолчанию: | По умолчанию SDK пытается загрузить данные с сервера и возвращает кешированные данные при сбое. Мы рекомендуем этот вариант, так как он гарантирует, что пользователи всегда получают самые актуальные данные. Однако если вы предполагаете, что у ваших пользователей нестабильное интернет-соединение, рассмотрите использование Обратите внимание: кеш сохраняется при перезапуске приложения и очищается только при переустановке или ручной очистке. |
Прежде чем использовать Remote Config и кастомные пейволы, нужно получить информацию о них. Обратите внимание, что эта тема касается Remote Config и кастомных пейволов. Для получения пейволов, созданных с помощью Paywall Builder, см. Получение пейволов Paywall Builder и их конфигурации.
Хотите увидеть реальный пример интеграции Adapty SDK в мобильное приложение? Посмотрите наши примеры приложений — они демонстрируют полную настройку: отображение пейволов, совершение покупок и другие базовые функции.
Прежде чем начать получать пейволы и продукты в мобильном приложении (нажмите, чтобы развернуть)
-
Создайте продукты в дашборде Adapty.
-
Создайте пейвол и добавьте в него продукты в дашборде Adapty.
-
Создайте плейсменты и добавьте пейвол в плейсмент в дашборде Adapty.
-
Установите Adapty SDK в своё мобильное приложение.
Получение информации о пейволе
В Adapty продукт объединяет в себе продукты из App Store и Google Play. Эти кроссплатформенные продукты подключаются к пейволам, что позволяет отображать их в нужных плейсментах вашего мобильного приложения.
Чтобы показать продукты, необходимо получить пейвол из одного из ваших плейсментов с помощью метода getPaywall.
try {
const paywall = await adapty.getPaywall({
placementId: 'YOUR_PLACEMENT_ID',
locale: 'en',
params: {
fetchPolicy: 'reload_revalidating_cache_data', // Load from server, fallback to cache
loadTimeoutMs: 5000 // 5 second timeout
}
});
// the requested paywall
} catch (error) {
console.error('Failed to fetch paywall:', error);
}
| Параметр | Обязательность | Описание |
|---|---|---|
| placementId | обязательный | Идентификатор плейсмента. Это значение, которое вы указали при создании плейсмента в дашборде Adapty. |
| locale | опциональный по умолчанию: | Идентификатор локализации пейвола. Ожидается код языка, состоящий из одного или нескольких подтегов, разделённых символом минус (-). Первый подтег — язык, второй — регион. Пример: Подробнее о кодах локалей и рекомендациях по их использованию см. в разделе Локализации и коды локалей. |
| params.fetchPolicy | опциональный по умолчанию: | По умолчанию SDK пытается загрузить данные с сервера и возвращает кешированные данные в случае сбоя. Мы рекомендуем этот вариант, поскольку он гарантирует, что пользователи всегда получают актуальные данные. Однако если у ваших пользователей нестабильное интернет-соединение, рассмотрите использование Обратите внимание, что кеш сохраняется после перезапуска приложения и очищается только при его переустановке или вручную. |
| params.loadTimeoutMs | опциональный по умолчанию: 5000 мс | Это значение ограничивает таймаут (в миллисекундах) для данного метода. При достижении таймаута будут возвращены кешированные данные или локальный резервный пейвол. Обратите внимание, что в редких случаях метод может завершиться с небольшой задержкой относительно значения, указанного в |
| Не прописывайте идентификаторы продуктов в коде. Единственный ID, который нужно хардкодить, — это ID плейсмента. Пейволы настраиваются удалённо, поэтому количество продуктов и доступных предложений может измениться в любой момент. Приложение должно обрабатывать эти изменения динамически — если сегодня пейвол возвращает два продукта, а завтра три, все они должны отображаться без изменений в коде. |
Параметры ответа:
| Параметр | Описание |
|---|---|
| Paywall | Объект AdaptyPaywall, содержащий: список идентификаторов продуктов, идентификатор пейвола, Remote Config и ряд других свойств. |
Получение продуктов
Получив пейвол, вы можете запросить массив продуктов, который ему соответствует:
try {
const products = await adapty.getPaywallProducts({ paywall });
// the requested products list
} catch (error) {
console.error('Failed to fetch products:', error);
}Параметры ответа:
| Параметр | Описание |
|---|---|
| Products | Список объектов AdaptyPaywallProduct с идентификатором продукта, названием, ценой, валютой, длительностью подписки и рядом других свойств. |
При реализации собственного дизайна пейвола вам, скорее всего, понадобятся свойства объекта AdaptyPaywallProduct. Ниже приведены наиболее часто используемые из них, однако полный список всех доступных свойств можно найти в документации по ссылке. | |
| Свойство | Описание |
| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Title | Чтобы отобразить название продукта, используйте product.localizedTitle. Локализация основана на выбранной пользователем стране стора, а не на локали устройства. |
| Price | Чтобы отобразить цену в локализованном формате, используйте product.price?.localizedString. Локализация основана на локали устройства. Цену как число можно получить через product.price?.amount — значение будет в местной валюте. Символ валюты доступен через product.price?.currencySymbol. |
| Subscription Period | Чтобы отобразить период (например, неделя, месяц, год и т. д.), используйте product.subscription?.localizedSubscriptionPeriod. Локализация основана на локали устройства. Для программного получения периода подписки используйте product.subscription?.subscriptionPeriod. Через свойство unit можно узнать единицу периода: 'day', 'week', 'month', 'year' или 'unknown'. Свойство numberOfUnits возвращает количество таких единиц. Например, для квартальной подписки в unit будет 'month', а в numberOfUnits — 3. |
| Introductory Offer | Чтобы отобразить бейдж или другой индикатор наличия introductory offer, используйте свойство product.subscription?.offer?.phases. Это список, который может содержать до двух фаз скидки: фазу бесплатного пробного периода и фазу вводной цены. Каждый объект фазы содержит следующие полезные свойства:• paymentMode: строка со значениями 'free_trial', 'pay_as_you_go', 'pay_up_front' и 'unknown'. Бесплатный пробный период имеет тип 'free_trial'.• price: сниженная цена в виде числа. Для бесплатного пробного периода здесь будет 0.• localizedNumberOfPeriods: строка, локализованная под локаль устройства и описывающая длительность предложения. Например, для трёхдневного пробного периода здесь будет '3 days'.• subscriptionPeriod: позволяет получить отдельные параметры периода предложения — работает так же, как описано в предыдущем разделе.• localizedSubscriptionPeriod: отформатированный период подписки скидки для локали пользователя. |
Ускорьте загрузку пейвола с помощью пейвола для аудитории по умолчанию
Как правило, пейволы загружаются почти мгновенно, так что беспокоиться об ускорении этого процесса не нужно. Однако если у вас много аудиторий и пейволов, а пользователи работают с медленным интернетом, загрузка пейвола может занять больше времени, чем хотелось бы. В таких ситуациях имеет смысл показывать пейвол по умолчанию, чтобы не оставлять пользователя ни с чем.
Чтобы решить эту задачу, используйте метод getPaywallForDefaultAudience, который получает пейвол указанного плейсмента для аудитории All Users. Однако важно понимать, что рекомендуемый подход — получать пейвол методом getPaywall, как описано в разделе Получение информации о пейволе выше.
Почему мы рекомендуем использовать getPaywall
Метод getPaywallForDefaultAudience имеет ряд существенных недостатков:
- Возможные проблемы с обратной совместимостью: если вам нужно показывать разные пейволы для разных версий приложения (текущей и будущих), могут возникнуть трудности. Придётся либо проектировать пейволы с поддержкой текущей (старой) версии, либо смириться с тем, что пользователи на ней могут столкнуться с проблемами — пейволы просто не отобразятся.
- Потеря таргетинга: все пользователи будут видеть один и тот же пейвол, созданный для аудитории All Users, — а значит, вы лишаетесь персонализированного таргетинга (по странам, маркетинговой атрибуции или собственным пользовательским атрибутам).
Если вы готовы принять эти ограничения ради более быстрого получения пейвола, используйте метод
getPaywallForDefaultAudience, как описано ниже. В противном случае используйте методgetPaywall, описанный выше.
try {
const paywall = await adapty.getPaywallForDefaultAudience({
placementId: 'YOUR_PLACEMENT_ID',
locale: 'en',
params: {
fetchPolicy: 'reload_revalidating_cache_data' // Load from server, fallback to cache
}
});
// the requested paywall
} catch (error) {
console.error('Failed to fetch default audience paywall:', error);
}
| Параметр | Наличие | Описание |
|---|---|---|
| placementId | обязательный | Идентификатор плейсмента. Это значение вы указали при создании плейсмента в дашборде Adapty. |
| locale | необязательный по умолчанию: | Идентификатор локализации пейвола. Ожидается языковой код, состоящий из одного или нескольких подтегов, разделённых символом минус (-). Первый подтег обозначает язык, второй — регион. Пример: Подробнее о кодах локалей и рекомендациях по их использованию см. в разделе Локализации и коды локалей. |
| params.fetchPolicy | необязательный по умолчанию: | По умолчанию SDK пытается загрузить данные с сервера и возвращает кешированные данные в случае неудачи. Мы рекомендуем этот вариант, поскольку он гарантирует, что пользователи всегда получают актуальные данные. Однако если у ваших пользователей нестабильное интернет-соединение, рассмотрите вариант Обратите внимание: кеш сохраняется при перезапуске приложения и очищается только при его переустановке или ручной очистке. |