---
title: "Тестирование в песочнице"
description: "Тестируйте покупки в среде песочницы, чтобы убедиться в корректности транзакций."
---

Когда вы настроили всё в дашборде Adapty и своём мобильном приложении, пора приступать к тестированию встроенных покупок.

**Примечание:** ни один из инструментов тестирования не снимает деньги с пользователей при тестовой покупке продукта. App Store не отправляет письма о покупках или возвратах, совершённых в тестовых средах.

:::info
Перед тестированием встроенных покупок убедитесь, что:
- Вы прошли гайды [quickstart](quickstart) по интеграции стора, добавлению продуктов и интеграции Adapty SDK.
- Ваш продукт отмечен как [**Ready to submit**](InvalidProductIdentifiers#step-2-check-products) в App Store Connect.
:::

## Тестирование в песочнице \{#sandbox-testing\}

<div style={{
    maxWidth: '560px',
    margin: '0 auto 2rem',
    position: 'relative',
    aspectRatio: '16/9',
    width: '100%'
}}>
    <iframe
        style={{
            position: 'absolute',
            top: 0,
            left: 0,
            width: '100%',
            height: '100%'
        }}
        src="https://www.youtube.com/embed/hq4PRU-vuik?si=m5F5Sj6iLEJ-2q6n"
        title="YouTube video player"
        frameBorder="0"
        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
        referrerPolicy="strict-origin-when-cross-origin"
        allowFullScreen
    />
</div>

:::info
Мы рекомендуем тестировать встроенные покупки на реальном устройстве. Хотя покупки в песочнице можно запускать на симуляторах, для полноценного тестирования всех сценариев — включая диалоги оплаты и биометрические подтверждения — нужно реальное устройство.
:::

Есть два основных способа тестирования встроенных покупок:

- **Сборка в Xcode и запуск на тестовом устройстве**: удобно для разработчиков и QA-инженеров.
- **Использование тестового аккаунта песочницы вместе с TestFlight**: подходит для всех остальных.

Оба варианта описаны в гайде ниже.

### Шаг 1. Создайте тестовый аккаунт Sandbox в App Store Connect \{#step-1-create-sandbox-test-account-in-app-store-connect\}

:::warning
Создайте новый тестовый аккаунт Sandbox, чтобы история покупок была чистой. Если вы используете существующий аккаунт, ранее купленные продукты останутся доступными, и протестировать их повторную покупку не получится.
:::

Создать новый тестовый аккаунт Sandbox можно за несколько кликов:

1. Перейдите в [**Users and Access** > **Sandbox** > **Test Accounts**](https://appstoreconnect.apple.com/access/users/sandbox) в App Store Connect и нажмите **+**.

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

2. Введите данные тестового пользователя. Обязательно укажите **Country or Region**, которую планируете тестировать — это влияет на доступность продуктов в регионе и валюту покупки.

:::tip
- Если вы используете Gmail или iCloud, можно переиспользовать существующий адрес электронной почты с помощью [субадресации через плюс](https://www.wikihow.com/Use-Plus-Addressing-in-Gmail).
- Можно использовать произвольный адрес электронной почты, который даже не существует, но при входе на тестовом устройстве убедитесь, что отклонили двухфакторную аутентификацию (2FA).
:::

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

3. Нажмите **Create**.

### Шаг 2. Включите режим разработчика \{#step-2-enable-the-developer-mode\}

:::note
Пропустите этот шаг, если режим разработчика **уже включён** на вашем тестовом устройстве или если у вас **нет Mac**.
:::

Вам понадобится Mac с установленным Xcode и кабель для подключения тестового устройства:

1. Откройте Xcode на Mac. Если вы собираетесь тестировать встроенные покупки через TestFlight, достаточно просто иметь установленный Xcode — приложение в нём открывать не нужно.
2. Подключите тестовое устройство к Mac с помощью кабеля.
3. На тестовом устройстве перейдите в **Settings > Privacy & Security > Developer Mode** и включите **Developer Mode**.

### Шаг 3. Загрузите приложение из TestFlight \{#step-3-download-the-app-from-testflight\}

:::info
Этот шаг актуален только при тестировании через TestFlight. Если вы собираете приложение в Xcode, пропустите его.
:::

Подробнее о том, как отправить приложение в TestFlight, читайте в [документации Apple](https://developer.apple.com/documentation/StoreKit/testing-in-app-purchases-with-sandbox#Prepare-for-sandbox-testing).

Перед загрузкой TestFlight убедитесь, что на тестовом устройстве выполнен вход с вашим рабочим Apple Account. Затем загрузите тестируемое приложение из TestFlight.

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

### Шаг 4. Переключитесь на тестовый аккаунт Sandbox \{#step-4-switch-to-sandbox-test-account\}

<Details>
    <summary>Работаете не на Mac? Вот альтернативный способ</summary>

    Если вы не работаете на macOS, переключиться на аккаунт песочницы через Xcode не получится. Однако это можно сделать прямо на тестовом устройстве:
1. На тестовом устройстве перейдите в **Settings > Your Apple Account > Media & Purchases**.
2. Выберите **Sign Out** во всплывающем меню.
3. Откройте приложение, загруженное из TestFlight, и попробуйте купить продукт.
4. Когда появится запрос на вход, введите данные аккаунта песочницы, чтобы переключиться в среду песочницы.

</Details>

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

1. На тестовом устройстве перейдите в **Settings > Your Apple Account > Media & Purchases**.
2. Выберите **Sign Out** во всплывающем меню.
3. Перейдите в **Settings > Developer**. Если пункт **Developer** недоступен, убедитесь, что вы [включили его на шаге 2](#step-2-enable-the-developer-mode).

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

4. Прокрутите до раздела **Sandbox Apple Account** и нажмите **Sign In**.

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

5. Войдите с данными вашего Sandbox Apple Account.

### Шаг 5. Очистите историю покупок \{#step-5-clear-purchase-history\}

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

1. На тестовом устройстве перейдите в **Settings > Developer > Sandbox Apple Account**.
2. Выберите **Manage** во всплывающем меню.
3. Перейдите в **Account Settings** и нажмите **Clear Purchase History**.

:::danger
Этот шаг обязателен каждый раз, когда вы повторяете тестирование с тем же тестовым аккаунтом Sandbox. В этом случае также нужно [выйти из тестового аккаунта Sandbox](#step-4-switch-to-sandbox-test-account) и войти снова, чтобы очистить кэш истории покупок на тестовом устройстве.
:::

### Шаг 6. Соберите приложение в Xcode и запустите \{#step-6-build-in-xcode-and-run\}

:::info
Этот шаг актуален только при тестировании со сборкой в Xcode. Если вы используете TestFlight, пропустите его.
:::

1. Подключите тестовое устройство к Mac.
2. Откройте Xcode.
3. Нажмите **Run** на панели инструментов или выберите **Product > Run**, чтобы собрать и запустить приложение на подключённом устройстве.

При успешной сборке Xcode запустит приложение на устройстве и откроет сессию отладки в области отладки.

Приложение готово к тестированию на устройстве.

### Шаг 7. Совершите тестовую покупку \{#step-7-make-test-purchase\}

Откройте приложение и совершите тестовую покупку через пейвол.

После этого перейдите к статье [проверки тестовых покупок](validate-test-purchases), чтобы проверить результаты.

### Шаг 8. Продолжайте тестирование \{#step-8-keep-testing\}

Теперь тестовая среда полностью настроена. Если хотите протестировать ещё раз, [очистите историю покупок аккаунта песочницы](https://developer.apple.com/help/app-store-connect/test-in-app-purchases/manage-sandbox-apple-account-settings/).

## Проблемы при тестировании \{#testing-issues\}

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

### Проблемы с TestFlight \{#testflight-issues\}

**Если вы используете TestFlight без тестового аккаунта Sandbox**, очистить историю покупок не получится, что приводит к разным ошибкам и недостоверным результатам тестирования.

Если вы случайно забыли [переключиться на тестовый аккаунт Sandbox](#step-4-switch-to-sandbox-test-account) и хотя бы раз открыли приложение, TestFlight привяжет историю покупок к вашему рабочему Apple Account, что вызовет непредвиденные проблемы.

Чтобы исправить это, выполните следующие шаги:

1. Удалите приложение с тестового устройства.
2. Следуйте шагам [тестирования в песочнице](#sandbox-testing).

:::note
Важно не просто переустановить приложение, но и переключиться на тестовый аккаунт Sandbox, очистить историю покупок и запустить приложение под этим аккаунтом.
:::

### Проблемы с общими уровнями доступа \{#shared-access-levels-issues\}

При повторном тестировании с тем же тестовым аккаунтом Sandbox у тестового пользователя может возникнуть непредвиденное поведение с [общими уровнями доступа](sharing-paid-access-between-user-accounts).

Чтобы проверить, есть ли у пользователя унаследованный уровень доступа, перейдите в [Profiles & Segments](https://app.adapty.io/profiles/users) из дашборда Adapty и откройте профиль пользователя.

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

Если у пользователя есть унаследованный уровень доступа, выполните следующие шаги для получения точных результатов тестирования:

1. Удалите родительский профиль.
2. Удалите приложение с тестового устройства.
3. [Загрузите приложение из TestFlight](#step-3-download-the-app-from-testflight).
4. [Переключитесь на тестовый аккаунт Sandbox](#step-4-switch-to-sandbox-test-account).
5. [Очистите историю покупок](#step-5-clear-purchase-history).
6. [Откройте приложение и совершите тестовую покупку](#step-6-make-test-purchase).

### Обновление приложения в TestFlight \{#updating-app-in-testflight\}

Если приложение в TestFlight было обновлено:

1. Удалите приложение с тестового устройства.
2. [Загрузите приложение из TestFlight](#step-3-download-the-app-from-testflight).
3. [Переключитесь на тестовый аккаунт Sandbox](#step-4-switch-to-sandbox-test-account).
4. [Очистите историю покупок](#step-5-clear-purchase-history).
5. [Откройте приложение и совершите тестовую покупку](#step-6-make-test-purchase).

### Авторизация в процессе покупки \{#authorization-during-the-purchase-process\}

Если вы загрузили приложение из TestFlight и не [вошли в аккаунт песочницы через настройки устройства](#step-4-switch-to-sandbox-test-account), войти в него в процессе покупки не получится. Для успешного совершения покупки необходимо войти в аккаунт песочницы через настройки устройства до начала покупки.

## Тестовые подписки \{#test-subscriptions\}

При тестировании приложения с тестовым аккаунтом Sandbox можно настроить скорость обновления подписки для каждого тестировщика в песочнице. Подробнее об изменении скорости обновления подписок читайте в [официальной документации Apple](https://developer.apple.com/help/app-store-connect/test-in-app-purchases/manage-sandbox-apple-account-settings).

По умолчанию подписки обновляются не более 12 раз, после чего останавливаются, согласно следующему расписанию:

| Длительность подписки                | 1 неделя   | 1 месяц    | 2 месяца   | 3 месяца   | 6 месяцев  | 1 год      |
| :----------------------------------- | :--------- | :--------- | :--------- | :--------- | :--------- | :--------- |
| Скорость обновления подписки         | 3 минуты   | 5 минут    | 10 минут   | 15 минут   | 30 минут   | 1 час      |
| Длительность повторных попыток оплаты | 10 минут   | 10 минут   | 10 минут   | 10 минут   | 10 минут   | 10 минут   |
| Длительность льготного периода оплаты | 3 минуты   | 5 минут    | 5 минут    | 5 минут    | 5 минут    | 5 минут    |

:::note
Учтите, что тестовые транзакции появляются в [Event feed](validate-test-purchases) с задержкой до 10 минут.
:::

## Тестирование офферов \{#test-offers\}

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

Наиболее надёжный способ тестирования офферов — использование полностью нового [тестового аккаунта Sandbox](#step-1-create-sandbox-test-account-in-app-store-connect). Повторное тестирование с тем же аккаунтом Sandbox может привести к непредвиденному поведению.

:::danger
Если вы повторяете тестирование с тем же тестовым аккаунтом Sandbox, обязательно [очистите историю покупок](#step-5-clear-purchase-history), чтобы избежать проблем с условиями предоставления офферов.
:::