---
title: "Пользовательские теги в Paywall Builder"
description: "Узнайте, как использовать пользовательские теги в Paywall Builder Adapty для персонализации пользовательского опыта и оптимизации конверсий."
---

Пользовательские теги позволяют избежать создания отдельных пейволов для разных сценариев. Представьте один пейвол, который динамически адаптируется на основе данных пользователя. Например, вместо обезличенного «Привет!» можно приветствовать пользователей лично: «Привет, Иван!» или «Привет, Анна!»

:::warning

Этот раздел описывает новый Paywall Builder, совместимый с iOS, Android и React Native SDK версии 3.0 и выше, а также Flutter и Unity SDK версии 3.3.0 и выше. Информацию о старом Paywall Builder, совместимом с Adapty SDK v2.x и более ранними версиями, см. в статье [Пользовательские теги в старом Paywall Builder](custom-tags-in-legacy-paywall-builder).

:::

Вот несколько примеров использования пользовательских тегов:

- Отображение имени или email пользователя на пейволе.
- Показ текущего дня недели для стимулирования продаж (например, «Счастливый четверг»).
- Добавление персонализированных сведений о продаваемых продуктах (например, название фитнес-программы или номер телефона в VoIP-приложении).

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

:::warning
Обязательно добавляйте фолбэки для каждой строки с пользовательскими тегами.

В некоторых случаях приложение может не знать, чем заменить пользовательский тег — особенно если пользователи используют старую версию AdaptyUI SDK. Чтобы избежать этого, всегда добавляйте резервный текст, который заменит строки с неизвестными пользовательскими тегами. Иначе пользователи могут увидеть теги в виде кода (`<USERNAME/>`).
:::

## Как добавить пользовательский тег в пейвол \{#how-to-add-a-custom-tag-to-a-paywall\}

Вы можете добавить один или несколько пользовательских тегов в любую текстовую строку в Paywall Builder.

Чтобы добавить пользовательский тег:

1. Введите пользовательский тег в формате `<CUSTOM_TAG/>` или введите открывающую угловую скобку (\<) в текстовой строке — система предложит тег в правильном формате.

   Несколько важных моментов:

   - В Paywall Builder Adapty пользовательские теги заключены в угловые скобки (`<CUSTOM_TAG/>`), но в коде приложения они указываются напрямую (CUSTOM_TAG).
   - Пользовательские теги чувствительны к регистру.
   - Пользовательские теги не могут совпадать ни с одной из [переменных тегов](paywall-builder-tag-variables), зарезервированных в Adapty для информации о продуктах.

  <img src="/assets/shared/img/1ea0b95-adding_custom_tag.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

2. После добавления пользовательского тега обязательно введите резервную строку. Этот резервный текст будет отображаться в приложении, если оно не распознаёт конкретный пользовательский тег — так пользователи не увидят тег в виде кода. Резервный текст заменяет всю строку, содержащую пользовательский тег.

  <img src="/assets/shared/img/4d43874-custom_tag_fallback.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

## Как использовать пользовательские теги в мобильном приложении \{#how-to-use-custom-tags-in-your-mobile-app\}

Для использования пользовательских тегов в мобильном приложении создайте объект `tagResolver` — словарь или карту, которая сопоставляет пользовательские теги со строковыми значениями, на которые они будут заменены при отрисовке пейвола. Пример:

<Tabs groupId="current-os" queryString>
<TabItem value="swift" label="Swift" default>

```swift showLineNumbers
let tagResolver = [
    "USERNAME": "John",
] 
  
let paywallConfiguration = try await AdaptyUI.getPaywallConfiguration(
    forPaywall: paywall,
    tagResolver: tagResolver // or any other AdaptyTagResolver protocol implementation
)
```
</TabItem>
<TabItem value="kotlin" label="Kotlin" default>

```kotlin showLineNumbers
val customTags = mapOf("USERNAME" to "John")
val tagResolver = AdaptyUiTagResolver { tag -> customTags[tag] }
```
</TabItem>
<TabItem value="java" label="Java" default>

```java showLineNumbers
Map<String, String> customTags = new HashMap<>();
customTags.put("USERNAME", "John");
AdaptyUiTagResolver tagResolver = customTags::get;
```
</TabItem>

<TabItem value="kmp" label="Kotlin Multiplatform" default>

```kotlin showLineNumbers
val customTags = mapOf(
    "USERNAME" to "John",
    "CUSTOM_TAG_NAME" to "Walter White",
    "CUSTOM_TAG_PHONE" to "+1 234 567890"
)

val view = AdaptyUI.createPaywallView(
    paywall = paywall,
    customTags = customTags
)
```
</TabItem>

<TabItem value="flutter" label="Flutter" default>

```dart showLineNumbers
final customTags = {
  'USERNAME': 'John',
};

try {
final view = await AdaptyUI().createPaywallView(
    paywall: paywall,
    customTags: customTags,
);
} on AdaptyError catch (e) {
  // handle the error
} catch (e) {
  // handle the error
}
```
</TabItem>

<TabItem value="unity" label="Unity (C#)" default>

```csharp showLineNumbers
var parameters = new AdaptyUICreateViewParameters()
  .SetCustomTags(
    new Dictionary<string, string> {
      { "CUSTOM_TAG_NAME", "John Appleseed" }
    }
  )

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

</TabItem>

<TabItem value="rn" label="React Native" default>

```typescript showLineNumbers
let customTags: Record<string, string> = { "USERNAME": "John" }
//and then you can pass it to createPaywallView as follows:
view = await createPaywallView(paywall, { customTags })
```

</TabItem>
</Tabs>

В этом примере `USERNAME` — пользовательский тег, введённый в дашборде Adapty как `<USERNAME/>`. Объект `tagResolver` обеспечивает динамическую замену этого тега указанным значением — например, `John`.

Рекомендуем создавать и заполнять `tagResolver` непосредственно перед показом пейвола. Как только он будет готов, передайте его в метод AdaptyUI, который используется для отображения пейвола. Подробнее о показе пейволов читайте для [iOS](ios-present-paywalls), [Android](android-present-paywalls), [React Native](react-native-present-paywalls), [Flutter](flutter-present-paywalls) или [Unity](unity-present-paywalls).