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

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

Tip

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

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

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

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

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

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

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

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

Important

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

Adapty.GetFlow(
    "YOUR_PLACEMENT_ID",
    AdaptyPlacementFetchPolicy.Default,
    TimeSpan.FromSeconds(5),
    (flow, error) => {
        if (error != null) {
            // handle the error
            return;
        }

        // flow - the requested flow
    }
);
ПараметрНаличиеОписание
placementIdобязательныйИдентификатор плейсмента. Это значение вы указываете при создании плейсмента в дашборде Adapty.
fetchPolicyпо умолчанию: AdaptyPlacementFetchPolicy.Default

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

Однако если у ваших пользователей нестабильное интернет-соединение, рассмотрите AdaptyPlacementFetchPolicy.ReturnCacheDataElseLoad — он меняет порядок на обратный: сначала читает кэш и обращается к серверу только при его отсутствии. Пользователи могут не получать самые свежие данные, зато загрузка будет быстрее независимо от качества соединения. Кэш регулярно обновляется, поэтому его безопасно использовать в течение сессии, чтобы избежать лишних сетевых запросов.

Третья политика, AdaptyPlacementFetchPolicy.ReturnCacheDataIfNotExpiredElseLoad(maxAge), занимает промежуточное положение: она читает кэш, пока его возраст меньше переданного значения TimeSpan, и обращается к серверу, когда кэш устаревает.

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

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

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

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

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

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

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

ПараметрОписание
FlowОбъект AdaptyFlow с: идентификатором флоу, вариантами пейвола (Paywalls — каждый со своими идентификаторами продуктов), списком RemoteConfigs (по одной записи на каждую настроенную локаль) и рядом других свойств. Чтобы получить продукты флоу, вызовите GetPaywallProducts(flow).
Note

В версии 4 метод GetFlow не имеет параметра locale. При отображении флоу через CreateFlowView локализация разрешается автоматически. Для кастомных пейволов все доступные локали возвращаются вместе в flow.RemoteConfigs — выберите локаль, соответствующую устройству пользователя или настройкам вашего приложения. Подробнее см. в разделе Локализации и коды локалей.

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

Получив флоу, вы можете запросить массив продуктов, связанных с ним:

Adapty.GetPaywallProducts(flow, (products, error) => {
    if (error != null) {
        // handle the error
        return;
    }

    // products - the requested products array
});

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

ПараметрОписание
ProductsСписок объектов AdaptyPaywallProduct со следующими свойствами: идентификатор продукта, название продукта, цена, валюта, длительность подписки и ряд других параметров.

При реализации собственного дизайна флоу вам, скорее всего, понадобятся свойства объекта AdaptyPaywallProduct. Ниже представлены наиболее часто используемые из них.

СвойствоОписание
TitleЧтобы отобразить название продукта, используйте product.LocalizedTitle. Обратите внимание: локализация основана на выбранной пользователем стране в сторе, а не на локали самого устройства.
PriceЧтобы отобразить цену в локализованном формате, используйте product.Price.LocalizedString. Локализация основана на информации о локали устройства. Также можно получить цену в виде числа через product.Price.Amount — значение будет указано в местной валюте. Чтобы получить соответствующий символ валюты, используйте product.Price.CurrencySymbol.
Subscription PeriodЧтобы отобразить период (например, неделя, месяц, год и т. д.), используйте product.Subscription?.LocalizedPeriod. Локализация основана на локали устройства. Чтобы получить период подписки программно, используйте product.Subscription?.Period. Через это свойство доступен enum Unit для получения длины периода (AdaptySubscriptionPeriodUnit.Day, AdaptySubscriptionPeriodUnit.Week, AdaptySubscriptionPeriodUnit.Month, AdaptySubscriptionPeriodUnit.Year или AdaptySubscriptionPeriodUnit.Unknown). Значение NumberOfUnits содержит количество единиц периода. Например, для квартальной подписки в свойстве Unit будет AdaptySubscriptionPeriodUnit.Month, а в NumberOfUnits — 3.
Introductory OfferЧтобы отобразить бейдж или другой индикатор наличия introductory offer у подписки, используйте свойство product.Subscription?.Offer?.Phases. Это список, который может содержать до двух фаз скидки: фазу бесплатного пробного периода и фазу вводной цены. Каждый объект фазы содержит следующие полезные свойства:
• PaymentMode: enum со значениями AdaptyPaymentMode.FreeTrial, AdaptyPaymentMode.PayAsYouGo, AdaptyPaymentMode.PayUpFront и AdaptyPaymentMode.Unknown. Бесплатный пробный период соответствует типу AdaptyPaymentMode.FreeTrial.
• Price: объект AdaptyPrice со скидочной ценой — используйте Price.Amount для числового значения и Price.LocalizedString для отображения. Для бесплатных пробных периодов значение Price.Amount равно 0.
• LocalizedNumberOfPeriods: строка, локализованная по локали устройства, описывающая длительность предложения. Например, для трёхдневного пробного периода здесь будет "3 days".
• SubscriptionPeriod: альтернативный способ получить детали периода предложения. Работает так же, как описано в предыдущем разделе.
• LocalizedSubscriptionPeriod: отформатированный период подписки для скидки в соответствии с локалью пользователя.

Ускорьте загрузку флоу с помощью флоу для аудитории по умолчанию

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

Чтобы решить эту задачу, можно использовать метод GetFlowForDefaultAudience, который получает флоу указанного плейсмента для аудитории All Users. Однако важно понимать, что рекомендуемый подход — получать флоу с помощью метода GetFlow, как описано в разделе Получение информации о флоу выше.

Warning

Почему мы рекомендуем использовать GetFlow

Метод GetFlowForDefaultAudience имеет ряд существенных недостатков:

  • Потенциальные проблемы обратной совместимости: если нужно показывать разные флоу для разных версий приложения (текущей и будущих), могут возникнуть сложности. Придётся либо проектировать флоу с поддержкой текущей (устаревшей) версии, либо мириться с тем, что пользователи этой версии могут столкнуться с проблемами при отображении флоу.
  • Потеря таргетинга: все пользователи будут видеть один и тот же флоу, рассчитанный на аудиторию All Users, — а значит, вы теряете персонализированный таргетинг (в том числе по странам, маркетинговой атрибуции или собственным пользовательским атрибутам).

Если вы готовы принять эти ограничения ради более быстрого получения флоу, используйте метод GetFlowForDefaultAudience следующим образом. В противном случае придерживайтесь метода GetFlow, описанного выше.

Adapty.GetFlowForDefaultAudience(
    "YOUR_PLACEMENT_ID",
    AdaptyPlacementFetchPolicy.Default,
    (flow, error) => {
        if (error != null) {
            // handle the error
            return;
        }

        // flow - the requested flow
    }
);
ПараметрНаличиеОписание
placementIdобязательныйИдентификатор плейсмента. Это значение вы указывали при создании плейсмента в дашборде Adapty.
fetchPolicyпо умолчанию: AdaptyPlacementFetchPolicy.Default

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

Однако если у ваших пользователей нестабильное интернет-соединение, рассмотрите AdaptyPlacementFetchPolicy.ReturnCacheDataElseLoad — он меняет порядок на обратный: сначала читает кэш и обращается к серверу только тогда, когда кэш пуст. Пользователи могут не получить самые свежие данные, зато загрузка будет быстрее вне зависимости от качества связи. Кэш регулярно обновляется, поэтому его безопасно использовать в течение сессии, чтобы избежать лишних сетевых запросов.

Третья политика, AdaptyPlacementFetchPolicy.ReturnCacheDataIfNotExpiredElseLoad(maxAge), занимает промежуточное положение: она читает кэш, пока его возраст не превышает переданный TimeSpan, и обращается к серверу, когда кэш устарел.

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

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

Tip

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

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

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

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

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

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

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

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

Important

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

Adapty.GetPaywall("YOUR_PLACEMENT_ID", "en", (paywall, error) => {
  if(error != null) {
    // handle the error
    return;
  }
  
  // paywall - the resulting object
});
ПараметрНаличиеОписание
placementIdобязательныйИдентификатор плейсмента. Это значение вы задаёте при создании плейсмента в дашборде Adapty.
locale

опциональный

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

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

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

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

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

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

Однако если у ваших пользователей нестабильное интернет-соединение, рассмотрите AdaptyPlacementFetchPolicy.ReturnCacheDataElseLoad — он меняет порядок на обратный: сначала читается кеш, и только если он пуст, выполняется запрос к серверу. Пользователи могут получить не самые последние данные, зато загрузка будет быстрее вне зависимости от качества соединения. Кеш обновляется регулярно, поэтому его безопасно использовать в течение сессии, чтобы сократить количество сетевых запросов.

Третья политика, AdaptyPlacementFetchPolicy.ReturnCacheDataIfNotExpiredElseLoad(maxAge), занимает промежуточное положение: она читает кеш, пока его возраст меньше переданного TimeSpan, и обращается к серверу, когда кеш устарел.

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

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

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

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

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

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

Например, если изначально вы получаете 2 продукта, приложение должно отображать именно 2 продукта. Но если позднее вы получите 3 продукта, приложение должно показать все 3 без каких-либо изменений в коде. Единственное, что нужно задать жёстко, — это ID плейсмента.

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

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

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

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

Adapty.GetPaywallProducts(paywall, (products, error) => {
  if(error != null) {
    // handle the error
    return;
  }
  
  // products - the requested products array
});

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

ПараметрОписание
ProductsСписок объектов AdaptyPaywallProduct с: идентификатором продукта, названием продукта, ценой, валютой, длительностью подписки и рядом других свойств.

При реализации собственного дизайна пейвола вам, скорее всего, понадобятся свойства объекта AdaptyPaywallProduct. Ниже приведены наиболее часто используемые из них, полный список доступных свойств смотрите в документации по ссылке.

СвойствоОписание
TitleЧтобы отобразить название продукта, используйте product.LocalizedTitle. Локализация основана на стране стора, выбранной пользователем, а не на локали устройства.
PriceЧтобы отобразить локализованную цену, используйте product.Price.LocalizedString. Локализация основана на локали устройства. Также можно получить цену в виде числа через product.Price.Amount — значение будет указано в локальной валюте. Для получения символа валюты используйте product.Price.CurrencySymbol.
Subscription PeriodЧтобы отобразить период (например, неделя, месяц, год и т. д.), используйте product.Subscription?.LocalizedPeriod. Локализация основана на локали устройства. Для программного получения периода подписки используйте product.Subscription?.Period. Там можно обратиться к перечислению Unit для получения длины (т. е. AdaptySubscriptionPeriodUnit.Day, AdaptySubscriptionPeriodUnit.Week, AdaptySubscriptionPeriodUnit.Month, AdaptySubscriptionPeriodUnit.Year или AdaptySubscriptionPeriodUnit.Unknown). Значение NumberOfUnits возвращает количество единиц периода. Например, для квартальной подписки в свойстве Unit будет AdaptySubscriptionPeriodUnit.Month, а в NumberOfUnits — 3.
Introductory OfferЧтобы отобразить значок или другой индикатор наличия у подписки introductory offer, используйте свойство product.Subscription?.Offer?.Phases. Это список, который может содержать до двух фаз скидки: фазу бесплатного пробного периода и фазу вводной цены. Каждый объект фазы содержит следующие полезные свойства:
• PaymentMode: перечисление со значениями AdaptyPaymentMode.FreeTrial, AdaptyPaymentMode.PayAsYouGo, AdaptyPaymentMode.PayUpFront и AdaptyPaymentMode.Unknown. Бесплатные пробные периоды имеют тип AdaptyPaymentMode.FreeTrial.
• Price: объект AdaptyPrice со скидочной ценой — используйте Price.Amount для получения числа и Price.LocalizedString для отображения. Для бесплатных пробных периодов Price.Amount равно 0.
• LocalizedNumberOfPeriods: строка, локализованная по локали устройства, описывающая длительность предложения. Например, для трёхдневного пробного периода в этом поле будет "3 days".
• SubscriptionPeriod: альтернативный способ получить отдельные детали периода предложения. Работает так же, как описано в предыдущем разделе для обычных подписок.
• LocalizedSubscriptionPeriod: отформатированный период подписки скидки для локали пользователя.

Ускорьте загрузку пейвола с помощью пейвола для аудитории по умолчанию

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

Чтобы решить эту задачу, можно использовать метод GetPaywallForDefaultAudience, который получает пейвол указанного плейсмента для аудитории All Users. Однако важно понимать, что рекомендуемый способ — получать пейвол методом getPaywall, как описано в разделе Получение пейвола выше.

Warning

Используйте GetPaywall вместо GetPaywallForDefaultAudience, так как последний имеет важные ограничения:

  • Проблемы совместимости: Могут возникнуть сложности при поддержке нескольких версий приложения — придётся либо проектировать с учётом обратной совместимости, либо мириться с тем, что в старых версиях отображение может быть некорректным.
  • Без персонализации: Показывает контент только для аудитории «All Users», без таргетинга по стране, атрибуции или пользовательским атрибутам.

Если скорость загрузки для вашего случая важнее этих недостатков, используйте GetPaywallForDefaultAudience, как показано ниже. В противном случае используйте GetPaywall, как описано выше.

Adapty.GetPaywallForDefaultAudience("YOUR_PLACEMENT_ID", "en", (paywall, error) => {
  if(error != null) {
    // handle the error
    return;
  }
  
  // paywall - the resulting object
});

Параметры:

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

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

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

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

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

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

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

Однако если у ваших пользователей нестабильный интернет, рассмотрите AdaptyPlacementFetchPolicy.ReturnCacheDataElseLoad — он меняет порядок на обратный: сначала читается кэш, и только если он пуст, SDK обращается к серверу. Пользователи могут получить не самые свежие данные, но загрузка будет быстрее вне зависимости от качества соединения. Кэш регулярно обновляется, поэтому его безопасно использовать в течение сессии, чтобы избежать лишних сетевых запросов.

Третья политика, AdaptyPlacementFetchPolicy.ReturnCacheDataIfNotExpiredElseLoad(maxAge), занимает промежуточное положение: она читает кэш, пока кэшированная копия «моложе» переданного значения TimeSpan, и обращается к серверу, когда кэш устарел.

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

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