Получение пейволов и продуктов для Remote Config пейволов в React Native 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. Эти кросс-платформенные продукты добавляются в пейволы, позволяя показывать их пользователям в нужных плейсментах мобильного приложения.

Чтобы отобразить продукты, необходимо получить пейвол из одного из ваших плейсментов с помощью метода getPaywall.

Не прописывайте ID продуктов в коде. Единственный ID, который стоит хардкодить — это ID плейсмента. Пейволы настраиваются удалённо, поэтому количество продуктов и доступные офферы могут меняться в любой момент. Ваше приложение должно обрабатывать эти изменения динамически: если сегодня пейвол возвращает два продукта, а завтра три — отображайте все без изменений в коде.

try {
    const id = 'YOUR_PLACEMENT_ID';
    const locale = 'en';

    const paywall = await adapty.getPaywall(id, locale);
    // the requested paywall
} catch (error) {
    // handle the error
}
ПараметрОбязательностьОписание
placementIdобязательныйИдентификатор плейсмента. Это значение вы указали при создании плейсмента в дашборде Adapty.
locale

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

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

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

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

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

fetchPolicyпо умолчанию: .reloadRevalidatingCacheData

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

Однако если у ваших пользователей нестабильное интернет-соединение, рассмотрите использование .returnCacheDataElseLoad — оно вернёт кешированные данные, если они есть. В этом случае данные могут быть не самыми свежими, но загрузка будет быстрее при любом качестве соединения. Кеш регулярно обновляется, так что его безопасно использовать в течение сессии для снижения числа сетевых запросов.

Обратите внимание: кеш сохраняется при перезапуске приложения и очищается только при его переустановке или вручную.

Adapty SDK хранит пейволы на двух уровнях: в описанном выше кеше с регулярным обновлением и в резервных пейволах. Для ускоренной загрузки используется CDN, а при его недоступности — резервный сервер. Эта система гарантирует получение актуальных пейволов даже при слабом интернет-соединении.

loadTimeoutMsпо умолчанию: 5 сек

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

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

Не прописывайте ID продуктов в коде! Так как пейволы настраиваются удалённо, доступные продукты, их количество и специальные офферы (например, бесплатные пробные периоды) могут меняться со временем. Убедитесь, что ваш код корректно обрабатывает эти сценарии.
Например, если изначально вы получаете 2 продукта, приложение должно показывать 2 продукта. Но если позже вы получите 3 продукта, приложение должно отображать все 3 без изменений в коде. Единственное, что нужно хардкодить — это ID плейсмента.

Параметры ответа:

ПараметрОписание
PaywallОбъект AdaptyPaywall со списком ID продуктов, идентификатором пейвола, Remote Config и рядом других свойств.

Получение продуктов

Получив пейвол, вы можете запросить массив продуктов, соответствующих ему:

try {
    // ...paywall
    const products = await adapty.getPaywallProducts(paywall);
  // the requested products list
} catch (error) {
    // handle the 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 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

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

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

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

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

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

fetchPolicyпо умолчанию: .reloadRevalidatingCacheData

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

Однако если у ваших пользователей нестабильное интернет-соединение, рассмотрите использование .returnCacheDataElseLoad — оно вернёт кешированные данные, если они есть. В этом случае данные могут быть не самыми свежими, но загрузка будет быстрее при любом качестве соединения. Кеш регулярно обновляется, так что его безопасно использовать в течение сессии для снижения числа сетевых запросов.

Обратите внимание: кеш сохраняется при перезапуске приложения и очищается только при его переустановке или вручную.