Тестирование в песочнице

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

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

Перед тестированием встроенных покупок убедитесь, что:

  • Вы прошли гайды по быстрому старту: интеграция стора, добавление продуктов и интеграция SDK Adapty.
  • Ваш продукт имеет статус Ready to submit в App Store Connect.

Тестирование в песочнице

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

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

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

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

Шаг 1. Создайте тестовый аккаунт в песочнице App Store Connect

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

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

  1. Перейдите в Users and Access > Sandbox > Test Accounts в App Store Connect и нажмите +.
  2. Введите данные тестового пользователя. Обязательно укажите Country or Region, в которой планируете проводить тестирование, так как это влияет на доступность продуктов в регионе и валюту покупки.
  • Если вы пользуетесь Gmail или iCloud, вы можете использовать существующий адрес с субадресацией через плюс.
  • Можно указать случайный несуществующий адрес, но тогда при входе на тестовом устройстве обязательно откажитесь от двухфакторной аутентификации (2FA).
57c3a7c-apple_new_test_account.webp
  1. Нажмите Create.

Шаг 2. Включите режим разработчика

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

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

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

Шаг 3. Скачайте приложение из TestFlight

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

Подробнее о том, как отправить приложение в TestFlight, читайте в документации Apple.

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

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

Шаг 4. Переключитесь на тестовый аккаунт Sandbox

Работаете не на Mac? Вот как это сделать

Если вы не используете macOS, переключиться на аккаунт песочницы через Xcode не получится. Но это можно сделать прямо на тестовом устройстве:

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

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

  1. На тестовом устройстве откройте Settings > Your Apple Account > Media & Purchases.
  2. В появившемся меню выберите Sign Out.
  3. Перейдите в Settings > Developer. Если пункт Developer недоступен, убедитесь, что вы включили его на шаге 2.
devmode.png
  1. Прокрутите вниз до раздела Sandbox Apple Account и нажмите Sign In.
sandbox-acc.png
  1. Войдите, используя данные вашего Sandbox Apple Account.

Шаг 5. Очистите историю покупок

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

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

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

Шаг 6. Сборка в Xcode и запуск

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

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

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

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

Шаг 7. Совершите тестовую покупку

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

После этого перейдите к статье о проверке тестовых покупок, чтобы убедиться, что всё работает корректно.

Шаг 8. Продолжайте тестирование

Тестовая среда готова к работе. Если хотите протестировать снова, очистите историю покупок тестового аккаунта в песочнице.

Проблемы при тестировании

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

Проблемы с TestFlight

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

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

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

  1. Удалите приложение с тестового устройства.
  2. Следуйте инструкциям по тестированию в Sandbox.

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

Проблемы с общими уровнями доступа

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

Чтобы проверить, унаследовал ли пользователь уровень доступа, откройте Profiles & Segments в дашборде Adapty и перейдите в профиль пользователя.

profile-access-level-origin.webp

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

  1. Удалите родительский профиль.
  2. Удалите приложение с тестового устройства.
  3. Загрузите приложение из TestFlight.
  4. Переключитесь на тестовый аккаунт Sandbox.
  5. Очистите историю покупок.
  6. Откройте приложение и сделайте тестовую покупку.

Очистка истории покупок сбрасывает покупку на стороне стора. Удаление родительского профиля удаляет только запись на стороне Adapty. О том, почему повторно используемый аккаунт сохраняет доступ и какие действия по сбросу действительно работают, читайте в разделе Сброс подписки тестировщика.

Обновление приложения в TestFlight

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

  1. Удалите приложение с тестового устройства.
  2. Загрузите приложение из TestFlight.
  3. Переключитесь на тестовый аккаунт песочницы.
  4. Очистите историю покупок.
  5. Откройте приложение и выполните тестовую покупку.

Сброс подписки тестировщика

В среде песочницы покупка привязана к аккаунту Apple sandbox, а не к профилю Adapty. Действия с профилем — его удаление или изменение уровня доступа — не удаляют покупку из аккаунта стора. При следующей переустановке или синхронизации SDK повторно привяжет ту же транзакцию, и тестировщик снова получит доступ.

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

ДействиеПрофиль AdaptyАккаунт Apple sandboxДоступ тестировщика после
Удалить профиль в дашборде AdaptyУдалёнНе затронутВозвращается — при переустановке новый профиль заново привязывает ту же цепочку транзакций
Удалить профиль через Delete profile APIУдалёнНе затронутВозвращается — то же, что при удалении в дашборде
Добавить прошедшую дату истечения через Add access levelПерезаписывается при следующей синхронизацииНе затронутВозвращается при следующем обновлении — активная подписка применяет будущую дату истечения
Вызвать Revoke access level APIИстекает сейчас, генерирует событие access_level_updated (is_active=false)Не затронутВозвращается при следующем обновлении или переустановке — ненадёжный сброс для песочницы
Отменить подписку в аккаунте sandboxПрямых изменений нетПодписка отмененаОбновления прекращаются, доступ заканчивается по истечении текущего периода, тестировщик может купить продукт снова
Войти с новым аккаунтом Apple sandboxНовый профильНовый, пустой аккаунтЧистый — рекомендуется для повторного тестирования

Сброс тестировщика к чистому состоянию

Для повторного тестирования флоу покупок используйте новый аккаунт песочницы Apple для каждого теста вместо сброса профиля. Следуйте Шагу 1, чтобы создать аккаунт, и Шагу 4, чтобы переключиться на него на устройстве. Если вы повторно используете существующий аккаунт песочницы, сначала очистите историю покупок — удаление профиля Adapty её не очищает.

Отзыв доступа у существующего тестировщика

Чтобы отозвать доступ у тестировщика, не нужно задним числом менять дату истечения или вызывать API отзыва уровня доступа. В песочнице подписка автоматически обновляется каждые несколько минут, и каждое обновление восстанавливает будущую дату истечения в рамках той же цепочки транзакций — то есть доступ возвращается сам по себе. API отзыва уровня доступа действительно генерирует событие access_level_updated (is_active=false), но следующее обновление подписки его перезаписывает. Чтобы действительно закрыть доступ, отмените подписку на стороне стора. На тестовом устройстве перейдите в Settings > Developer > Sandbox Apple Account, выберите Manage и отмените подписку. Продления прекратятся, а доступ закроется по истечении текущего периода.

Почему удаление профиля возвращает доступ

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

  • Анонимные профили: При переустановке без customer_user_id уровень доступа аккаунта стора всегда наследуется, независимо от настройки совместного доступа к платным функциям.
  • Идентифицированные профили: Переносится ли доступ на новый customer_user_id, зависит от настройки совместного доступа к платным функциям.

О том, как Adapty связывает эти профили в цепочку, см. Как работают профили.

Тестирование подписок

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

По умолчанию подписки обновляются до 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 минут

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

Используйте песочницу, чтобы убедиться, что ваше приложение и бэкенд корректно обрабатывают продления, повторные попытки списания и льготные периоды — но не для предсказания времени продлений в продакшене. Ускоренный и ограниченный по количеству итераций график не соответствует продакшену. Чтобы воспроизвести транзакции на вашем сервере для тестирования бэкенда, используйте Set transaction API.

Тестирование офферов

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

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

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