---
title: "Включение покупок с помощью пейволов в Kotlin Multiplatform SDK"
description: "Быстрый старт по настройке Adapty для управления встроенными подписками."
---

Чтобы включить встроенные покупки, нужно понять три ключевых концепции:

- [**Продукты**](product) — всё, что пользователи могут купить (подписки, расходуемые покупки, пожизненный доступ).
- [**Пейволы**](paywalls) — конфигурации, определяющие, какие продукты предлагать. В Adapty пейволы — единственный способ получить продукты, и такой подход позволяет менять предложения, цены и комбинации продуктов без изменения кода приложения.
- [**Плейсменты**](placements) — где и когда показывать пейволы в приложении (например, `main`, `onboarding`, `settings`). Вы настраиваете пейволы для плейсментов в дашборде, а затем запрашиваете их по ID плейсмента в коде. Это упрощает запуск A/B-тестов и показ разных пейволов разным пользователям.

Adapty предлагает три способа включить покупки в приложении. Выберите подходящий в зависимости от требований:

| Реализация                | Сложность   | Когда использовать                                                                                                                                                                                                                                      |
|---------------------------|-------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Adapty Paywall Builder    | ✅ Просто    | Вы [создаёте готовый к покупкам пейвол в no-code конструкторе](quickstart-paywalls). Adapty автоматически отображает его и берёт на себя весь сложный процесс покупки, валидацию чеков и управление подписками. |
| Пейволы, созданные вручную | 🟡 Средне  | Вы реализуете UI пейвола в коде приложения, но всё равно получаете объект пейвола из Adapty для гибкого управления предложениями. См. [гайд](kmp-quickstart-manual).                                                         |
| Режим наблюдателя         | 🔴 Сложно   | У вас уже есть собственная инфраструктура обработки покупок и вы хотите её сохранить. Учтите, что режим наблюдателя имеет ограничения в Adapty. См. [статью](observer-vs-full-mode).                                                 |

:::important
**Шаги ниже показывают, как реализовать пейвол, созданный в Adapty Paywall Builder.**

Если вы не хотите использовать Paywall Builder, см. [гайд по обработке покупок в пейволах, созданных вручную](kmp-making-purchases).
:::

Чтобы показать пейвол, созданный в Adapty Paywall Builder, в коде приложения достаточно:

1. **Получить пейвол**: запросить пейвол из Adapty.
2. **Показать пейвол, и Adapty обработает покупки за вас**: отобразить полученный контейнер пейвола в приложении.
3. **Обработать действия кнопок**: связать взаимодействия пользователя с пейволом с реакцией приложения на них. Например, открывать ссылки или закрывать пейвол при нажатии кнопок.

## Перед началом работы \{#before-you-start\}

Выполните следующие шаги:

1. Подключите приложение к [App Store](initial_ios) и/или [Google Play](initial-android) в дашборде Adapty.
2. [Создайте продукты](create-product) в Adapty.
3. [Создайте пейвол и добавьте в него продукты](create-paywall).
4. [Создайте плейсмент и добавьте в него пейвол](create-placement).
5. [Установите и активируйте Adapty SDK](sdk-installation-kotlin-multiplatform) в коде приложения.

:::tip
Самый быстрый способ выполнить эти шаги — следовать [краткому руководству](quickstart) или создать пейволы и плейсменты с помощью [Developer CLI](developer-cli-quickstart).
:::

## 1. Получите пейвол \{#1-get-the-paywall\}

Ваши пейволы привязаны к плейсментам, настроенным в дашборде. Плейсменты позволяют показывать разные пейволы разным аудиториям или запускать [A/B-тесты](ab-tests).

Чтобы получить пейвол, созданный в Adapty Paywall Builder, нужно:

1. Получить объект `paywall` по ID [плейсмента](placements) с помощью метода `getPaywall` и проверить, создан ли пейвол в конструкторе.

2. Получить конфигурацию представления пейвола с помощью метода `createPaywallView`. Конфигурация содержит элементы UI и стили, необходимые для отображения пейвола.

:::important
Чтобы получить конфигурацию представления, необходимо включить переключатель **Show on device** в Paywall Builder. Иначе вы получите пустую конфигурацию, и пейвол не отобразится.
:::

```kotlin showLineNumbers
Adapty.getPaywall("YOUR_PLACEMENT_ID")
    .onSuccess { paywall ->
        if (!paywall.hasViewConfiguration) {
            return@onSuccess
        }
        
        val paywallView = AdaptyUI.createPaywallView(paywall = paywall)
        paywallView?.present()
    }
    .onError { error ->
        // handle the error
    }
```

## 2. Отобразите пейвол \{#2-display-the-paywall\}

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

Для отображения визуального пейвола на экране устройства его необходимо предварительно настроить. Вызовите метод `AdaptyUI.createPaywallView()`:

```kotlin showLineNumbers
val paywallView = AdaptyUI.createPaywallView(paywall = paywall)
paywallView?.present()
```

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

:::tip
Подробнее об отображении пейвола — в нашем [гайде](kmp-present-paywalls).
:::

## 3. Обработайте действия кнопок \{#3-handle-button-actions\}

Когда пользователи нажимают кнопки в пейволе, Kotlin Multiplatform SDK автоматически обрабатывает покупки, восстановление, закрытие пейвола и открытие ссылок.

Однако другие кнопки имеют пользовательские или предопределённые ID и требуют обработки действий в вашем коде. Также вы можете переопределить их поведение по умолчанию.

Например, ниже показано поведение кнопки закрытия по умолчанию. Добавлять его в код необязательно, но здесь видно, как это делается при необходимости.

:::tip
Читайте наши гайды о том, как обрабатывать [действия](kmp-handle-paywall-actions) и [события](kmp-handling-events) кнопок.
:::

```kotlin showLineNumbers
AdaptyUI.setPaywallsEventsObserver(object : AdaptyUIPaywallsEventsObserver {
    override fun paywallViewDidPerformAction(view: AdaptyUIPaywallView, action: AdaptyUIAction) {
        when (action) {
            AdaptyUIAction.CloseAction, AdaptyUIAction.AndroidSystemBackAction -> view.dismiss()
        }
    }
})
```

## Следующие шаги \{#next-steps\}

Ваш пейвол готов к показу в приложении. Протестируйте покупки в [песочнице App Store](test-purchases-in-sandbox) или в [Google Play Store](testing-on-android), чтобы убедиться, что тестовая покупка через пейвол проходит успешно.

Теперь вам нужно [проверить уровень доступа пользователей](kmp-check-subscription-status), чтобы показывать пейвол или открывать платные функции нужным пользователям.

## Полный пример \{#full-example\}

Вот как все эти шаги можно объединить в приложении.

```kotlin showLineNumbers
// Set up the observer for handling paywall actions
AdaptyUI.setPaywallsEventsObserver(object : AdaptyUIPaywallsEventsObserver {
    override fun paywallViewDidPerformAction(view: AdaptyUIPaywallView, action: AdaptyUIAction) {
        when (action) {
            is AdaptyUIAction.CloseAction -> view.dismiss()
        }
    }
})

// Get and display the paywall
Adapty.getPaywall("YOUR_PLACEMENT_ID")
    .onSuccess { paywall ->
        if (!paywall.hasViewConfiguration) {
            // Use custom logic
            return@onSuccess
        }

        val paywallView = AdaptyUI.createPaywallView(paywall = paywall)
        paywallView?.present()
    }
    .onError { error ->
        // handle the error
    }
```