---
title: "Получение пейволов Paywall Builder и их конфигурации в Unity SDK"
description: "Узнайте, как получать пейволы PB в Adapty для лучшего управления подписками в вашем Unity-приложении."
---

После того как вы [разработали визуальную часть пейвола](adapty-paywall-builder) с помощью нового Paywall Builder в дашборде Adapty, вы можете отобразить его в своём мобильном приложении. Первый шаг — получить пейвол, связанный с плейсментом, и его конфигурацию представления, как описано ниже.

:::warning
Новый Paywall Builder работает с Unity SDK версии 3.3.0 и выше.
:::

Обратите внимание, что этот раздел относится к пейволам, настроенным с помощью Paywall Builder. Если вы реализуете пейволы вручную, обратитесь к теме [Получение пейволов и продуктов для пейволов на Remote Config в мобильном приложении](fetch-paywalls-and-products-unity).

:::tip

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

:::

<details>
   <summary>Перед тем как начать показывать пейволы в мобильном приложении (нажмите, чтобы развернуть)</summary>

1. [Создайте продукты](create-product) в дашборде Adapty.
2. [Создайте пейвол и добавьте в него продукты](create-paywall) в дашборде Adapty.
3. [Создайте плейсменты и добавьте в них пейвол](create-placement) в дашборде Adapty.
4. Установите [Adapty SDK](sdk-installation-unity) в своё мобильное приложение.
</details>

## Получение пейвола, созданного с помощью Paywall Builder \{#fetch-paywall-designed-with-paywall-builder\}

Если вы [создали пейвол с помощью Paywall Builder](adapty-paywall-builder), вам не нужно беспокоиться о его отрисовке в коде мобильного приложения — он содержит как содержимое, так и способ отображения. Тем не менее вам нужно получить его ID через плейсмент, конфигурацию представления и затем показать пейвол в приложении.

Для оптимальной производительности важно получить пейвол и его [конфигурацию представления](unity-get-pb-paywalls#fetch-the-view-configuration-of-paywall-designed-using-paywall-builder) как можно раньше, чтобы изображения успели загрузиться до того, как пейвол будет показан пользователю.

Для получения пейвола используйте метод `GetPaywall`:

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

Параметры:

| Параметр | Наличие | Описание |
|---------|--------|-----------|
| **placementId** | обязательный | Идентификатор нужного [плейсмента](placements). Это значение, которое вы указали при создании плейсмента в дашборде Adapty. |
| **locale** | <p>опциональный</p><p>по умолчанию: `en`</p> | <p>Идентификатор [локализации пейвола](add-paywall-locale-in-adapty-paywall-builder). Ожидается языковой код, состоящий из одного или двух подтегов, разделённых символом минус (**-**). Первый подтег — язык, второй — регион.</p><p></p><p>Например: `en` означает английский, `pt-br` — бразильский португальский.</p><p>Подробнее о кодах локалей и рекомендациях по их использованию см. в разделе [Локализации и коды локалей](localizations-and-locale-codes).</p> |
| **fetchPolicy** | по умолчанию: `.reloadRevalidatingCacheData` | <p>По умолчанию SDK пытается загрузить данные с сервера и возвращает кешированные данные в случае ошибки. Мы рекомендуем этот вариант, так как он гарантирует, что пользователи всегда получают актуальные данные.</p><p></p><p>Однако если у ваших пользователей нестабильное подключение к интернету, рассмотрите использование `.returnCacheDataElseLoad` для возврата кешированных данных, если они есть. В этом случае пользователи могут не получить самые последние данные, но загрузка будет быстрее при любом качестве соединения. Кеш регулярно обновляется, поэтому его безопасно использовать в рамках сессии для сокращения сетевых запросов.</p><p></p><p>Кеш сохраняется при перезапуске приложения и очищается только при переустановке или ручной очистке.</p><p></p><p>Adapty SDK хранит пейволы локально в двух слоях: регулярно обновляемый кеш и [резервные пейволы](fallback-paywalls). Мы также используем CDN для быстрой загрузки пейволов и отдельный резервный сервер на случай недоступности CDN. Эта система обеспечивает актуальность пейволов и надёжность даже при слабом интернете.</p> |
| **loadTimeout** | по умолчанию: 5 сек | <p>Ограничивает таймаут для этого метода. Если таймаут истёк, возвращаются кешированные данные или локальный резервный вариант.</p><p>Обратите внимание, что в редких случаях метод может завершиться чуть позже указанного в `loadTimeout` значения, так как операция может включать несколько запросов под капотом.</p> |

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

| Параметр | Описание |
| :-------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Paywall   | Объект [`AdaptyPaywall`](https://unity.adapty.io/class_adapty_s_d_k_1_1_adapty_paywall.html) со списком ID продуктов, идентификатором пейвола, Remote Config и рядом других свойств. |

## Получение конфигурации представления пейвола, созданного с помощью Paywall Builder \{#fetch-the-view-configuration-of-paywall-designed-using-paywall-builder\}

:::important
Убедитесь, что в Paywall Builder включён переключатель **Show on device**. Если он выключен, конфигурация представления будет недоступна для получения.
:::

После получения пейвола проверьте, содержит ли он `ViewConfiguration` — это означает, что пейвол создан с помощью Paywall Builder. Это определит способ отображения пейвола. Если `ViewConfiguration` присутствует, обработайте его как пейвол Paywall Builder; если нет — [обработайте как пейвол с Remote Config](present-remote-config-paywalls-unity).

В Unity SDK напрямую вызовите метод `CreatePaywallView` без предварительного получения конфигурации представления.

:::warning
Результат метода `CreatePaywallView` можно использовать только один раз. Если он нужен снова, вызовите `CreatePaywallView` заново. Повторный вызов без пересоздания может привести к ошибке `AdaptyUIError.viewAlreadyPresented`.
:::

```csharp showLineNumbers
var parameters = new AdaptyUICreatePaywallViewParameters()
  .SetPreloadProducts(preloadProducts)
  .SetLoadTimeout(new TimeSpan(0, 0, 3));

AdaptyUI.CreatePaywallView(paywall, parameters, (view, error) => {
  // handle the result
});
```

Параметры:

| Параметр | Наличие | Описание |
| :------------------ | :------------- | :----------------------------------------------------------- |
| **paywall** | обязательный | Объект `AdaptyPaywall` для получения контроллера нужного пейвола. |
| **loadTimeout** | по умолчанию: 5 сек | Ограничивает таймаут для этого метода. Если таймаут истёк, возвращаются кешированные данные или локальный резервный вариант. Обратите внимание, что в редких случаях метод может завершиться чуть позже указанного в `loadTimeout` значения. |
| **PreloadProducts** | опциональный | Передайте массив `AdaptyPaywallProducts` для оптимизации времени отображения продуктов на экране. Если передано `nil`, AdaptyUI автоматически загрузит необходимые продукты. |
| **CustomTags** | опциональный | Задайте словарь пользовательских тегов и их значений. Пользовательские теги служат плейсхолдерами в содержимом пейвола и динамически заменяются конкретными строками для персонализации. Подробнее см. в разделе [Пользовательские теги в Paywall Builder](custom-tags-in-paywall-builder). |
| **CustomTimers** | опциональный | Задайте словарь пользовательских таймеров и их дат окончания. Пользовательские таймеры позволяют отображать обратный отсчёт в пейволе. |

:::note
Если вы используете несколько языков, узнайте, как добавить [локализацию Paywall Builder](add-paywall-locale-in-adapty-paywall-builder) и как правильно использовать коды локалей [здесь](localizations-and-locale-codes).
:::

Получив представление, [покажите пейвол](unity-present-paywalls).

## Настройка ресурсов \{#customize-assets\}

Для настройки изображений и видео в пейволе реализуйте пользовательские ресурсы.

Главные изображения и видео имеют предопределённые ID: `hero_image` и `hero_video`. В пакете пользовательских ресурсов вы обращаетесь к этим элементам по их ID и настраиваете их поведение.

Для других изображений и видео необходимо [задать пользовательский ID](custom-media) в дашборде Adapty.

Например, вы можете:

- Показывать разные изображения или видео разным пользователям.
- Показывать локальное превью-изображение, пока загружается основное удалённое.
- Показывать превью перед воспроизведением видео.

:::important
Для использования этой функции обновите Adapty Unity SDK до версии 3.8.0 или выше.
:::

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

```csharp showLineNumbers
var customAssets = new Dictionary<string, AdaptyCustomAsset>
{
    { "custom_image", AdaptyCustomAsset.LocalImageFile("custom_assets/images/custom_image.png") },
    { "hero_video", AdaptyCustomAsset.LocalVideoFile("custom_assets/videos/custom_video.mp4") }
};

var parameters = new AdaptyUICreatePaywallViewParameters()
    .SetCustomAssets(customAssets)
    .SetLoadTimeout(new TimeSpan(0, 0, 3));

AdaptyUI.CreatePaywallView(paywall, parameters, (view, error) => {
    // handle the result
});
```

:::note
Если ресурс не найден, пейвол вернётся к внешнему виду по умолчанию.
:::

## Настройка таймеров, заданных разработчиком \{#set-up-developer-defined-timers\}

Для использования пользовательских таймеров в Unity-приложении передайте словарь ID таймеров и их дат окончания непосредственно в метод `SetCustomTimers`. Пример:

```csharp showLineNumbers
var customTimers = new Dictionary<string, DateTime> {
    { "CUSTOM_TIMER_6H", DateTime.Now.AddHours(6) },
    { "CUSTOM_TIMER_NY", new DateTime(2025, 1, 1) }
};

var parameters = new AdaptyUICreatePaywallViewParameters()
    .SetCustomTimers(customTimers)
    .SetLoadTimeout(new TimeSpan(0, 0, 3));

AdaptyUI.CreatePaywallView(paywall, parameters, (view, error) => {
    // handle the result
});
```

В этом примере `CUSTOM_TIMER_NY` и `CUSTOM_TIMER_6H` — это **Timer ID** таймеров, заданных разработчиком в дашборде Adapty. Резолвер таймеров динамически обновляет каждый таймер правильным значением. Например:

- `CUSTOM_TIMER_NY`: время, оставшееся до даты окончания таймера, например до Нового года.
- `CUSTOM_TIMER_6H`: время, оставшееся в 6-часовом периоде, который начался при открытии пейвола пользователем.

## Ускорение загрузки пейвола с помощью пейвола для аудитории по умолчанию \{#speed-up-paywall-fetching-with-default-audience-paywall\}

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

Для этого используйте метод `GetPaywallForDefaultAudience`, который загружает пейвол указанного плейсмента для аудитории **All Users**. Однако важно понимать, что рекомендуемый подход — использовать метод `getPaywall`, как описано в разделе [Получение пейвола](#fetch-paywall) выше.

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

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

Если для вашего случая скорость загрузки важнее этих недостатков, используйте `GetPaywallForDefaultAudience`, как показано ниже. В противном случае используйте `GetPaywall`, как описано [выше](#fetch-paywall).
:::

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

Параметры:

| Параметр | Наличие | Описание |
|---------|--------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **placementId** | обязательный | Идентификатор нужного [плейсмента](placements). Это значение, которое вы указали при создании плейсмента в дашборде Adapty. |
| **locale** | <p>опциональный</p><p>по умолчанию: `en`</p> | <p>Идентификатор локализации пейвола. Ожидается языковой код, состоящий из одного или двух подтегов, разделённых символом минус (**-**). Первый подтег — язык, второй — регион.</p><p></p><p>Например: `en` означает английский, `pt-br` — бразильский португальский.</p> |
| **fetchPolicy** | по умолчанию: `.reloadRevalidatingCacheData` | <p>По умолчанию SDK пытается загрузить данные с сервера и возвращает кешированные данные в случае ошибки. Мы рекомендуем этот вариант, так как он гарантирует, что пользователи всегда получают актуальные данные.</p><p></p><p>Однако если у ваших пользователей нестабильное подключение к интернету, рассмотрите использование `.returnCacheDataElseLoad` для возврата кешированных данных, если они есть. В этом случае пользователи могут не получить самые последние данные, но загрузка будет быстрее при любом качестве соединения. Кеш регулярно обновляется, поэтому его безопасно использовать в рамках сессии для сокращения сетевых запросов.</p><p></p><p>Кеш сохраняется при перезапуске приложения и очищается только при переустановке или ручной очистке.</p><p></p><p>Adapty SDK хранит пейволы локально в двух слоях: регулярно обновляемый кеш и резервные пейволы. Мы также используем CDN для быстрой загрузки пейволов и отдельный резервный сервер на случай недоступности CDN. Эта система обеспечивает актуальность пейволов и надёжность даже при слабом интернете.</p> |