Получение пейволов и продуктов для пейволов с Remote Config в Capacitor SDK

Прежде чем отображать пейволы на основе Remote Config или кастомные пейволы, нужно получить информацию о них. Обратите внимание: этот раздел посвящён пейволам с Remote Config и кастомным пейволам. Если вы используете пейволы, настроенные в Paywall Builder, обратитесь к разделу Получение пейволов Paywall Builder и их конфигурации.

Хотите увидеть реальный пример интеграции Adapty SDK в мобильное приложение? Посмотрите наши примеры приложений — они демонстрируют полную настройку: отображение пейволов, совершение покупок и другие базовые функции.

Перед тем как начать получать пейволы и продукты в мобильном приложении (нажмите, чтобы развернуть)
  1. Создайте продукты в дашборде Adapty.

  2. Создайте пейвол и добавьте в него продукты в дашборде Adapty.

  3. Создайте плейсменты и добавьте в них пейвол в дашборде Adapty.

  4. Установите Adapty SDK в своём мобильном приложении.

Получение информации о пейволе

В Adapty продукт объединяет товары из App Store и Google Play. Эти кросс-платформенные продукты добавляются в пейволы, что позволяет отображать их в нужных плейсментах мобильного приложения.

Чтобы показать продукты, нужно получить Paywall из одного из ваших плейсментов с помощью метода 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

необязательный

по умолчанию: en

Идентификатор локализации пейвола. Ожидается языковой код из одного или нескольких подтегов, разделённых символом минус (-). Первый подтег — язык, второй — регион.

Пример: en — английский, pt-br — бразильский португальский.

Подробнее о кодах локализаций и рекомендациях по их использованию читайте в разделе Локализации и коды локалей.

params.fetchPolicy

необязательный

по умолчанию: 'reload_revalidating_cache_data'

По умолчанию SDK пытается загрузить данные с сервера и возвращает кешированные данные в случае ошибки. Мы рекомендуем этот вариант, так как он гарантирует, что пользователи всегда получают самые актуальные данные.

Если у ваших пользователей нестабильный интернет, рассмотрите использование 'return_cache_data_else_load' — тогда при наличии кеша он будет возвращён сразу. В таком сценарии данные могут быть не самыми свежими, но загрузка будет быстрее вне зависимости от качества соединения. Кеш обновляется регулярно, поэтому его безопасно использовать в течение сессии, чтобы сократить количество сетевых запросов.

Кеш сохраняется при перезапуске приложения и очищается только при переустановке или ручной очистке.

params.loadTimeoutMs

необязательный

по умолчанию: 5000 мс

Максимальное время ожидания (в миллисекундах) для этого метода. При его истечении будут возвращены кешированные данные или локальный резервный вариант.

Обратите внимание: в редких случаях метод может завершиться с небольшой задержкой относительно значения loadTimeoutMs, так как под капотом операция может включать несколько запросов.

Не хардкодьте идентификаторы продуктов. Единственный 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', а numberOfUnits3.
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);
}

Метод getPaywallForDefaultAudience доступен начиная с версии Capacitor SDK 2.11.2.

ПараметрОбязательностьОписание
placementIdобязательныйИдентификатор плейсмента. Это значение вы указали при создании плейсмента в дашборде Adapty.
locale

необязательный

по умолчанию: en

Идентификатор локализации пейвола. Ожидается языковой код из одного или нескольких подтегов, разделённых символом минус (-). Первый подтег — язык, второй — регион.

Пример: en — английский, pt-br — бразильский португальский.

Подробнее о кодах локализаций и рекомендациях по их использованию читайте в разделе Локализации и коды локалей.

params.fetchPolicy

необязательный

по умолчанию: 'reload_revalidating_cache_data'

По умолчанию SDK пытается загрузить данные с сервера и возвращает кешированные данные в случае ошибки. Мы рекомендуем этот вариант, так как он гарантирует, что пользователи всегда получают самые актуальные данные.

Если у ваших пользователей нестабильный интернет, рассмотрите использование 'return_cache_data_else_load' — тогда при наличии кеша он будет возвращён сразу. В таком сценарии данные могут быть не самыми свежими, но загрузка будет быстрее вне зависимости от качества соединения. Кеш обновляется регулярно, поэтому его безопасно использовать в течение сессии, чтобы сократить количество сетевых запросов.

Кеш сохраняется при перезапуске приложения и очищается только при переустановке или ручной очистке.