Всем привет, я Андрей, core iOS разработчик SDK для встроенных покупок Adapty. У нас накопилось много опыта по подключению внутренних покупок в приложениях на разных платформах, и мы делимся этим опытом в сериях статей. Сегодня — четвёртая статья из серии о покупках на iOS, с остальными можно познакомиться по ссылкам:
-
iOS in-app purchases часть 1: конфигурация и добавление в проект.
-
iOS in-app purchases часть 2: инициализация и обработка покупок.
-
iOS in-app purchases часть 4: локальное тестирование покупок в Xcode. — Вы тут
Мы уже разобрали подключение, обработку и валидацию покупок. После этого наступает этап тестирования — мы должны убедиться, что всё работает корректно, а и опыт покупки будет гладким для пользователя.
На iOS есть два варианта тестирования: классический, посредством Sandbox покупок, и новый способ локального тестирования покупок через Xcode (StoreKit local testing).
Sandbox тестирование — процесс несколько муторный и работает только на реальном девайсе. Чтобы тестировать в Sandbox, в самом начале надо завести аккаунт тестировщика на портале, связать его со своим устройством и после этого этого проверить все сценарии. Некоторые сценарии которых требуют очень большого количества манипуляций (refund, ask to buy, lifetime non-consumable покупки).
Тестирование в Xсode стало доступным, начиная с Xcode 12 (iOS 14), и значительно упростило процесс тестирования. Во-первых, тестировать покупки в Xcode можно на раннем этапе, когда приложение не подключено к AppStore Connect. Во-вторых, для Xcode не нужно заводить дополнительных аккаунтов в AppStore, что сильно ускоряет процесс конфигурации тестов, особенно для lifetime non-consumable. В-третьих, локальное тестирование можно автоматизировать, что потенциально снижает шанс появления ошибок в коде. Более того, можно даже писать UI-тесты на пейволы и другие интерфейсы, где фигурируют покупки.
Однако некоторые вещи доступны только в Sandbox. Например, использовать таблицу цен с автоматической конвертацией на разные валюты можно только в AppStore. Также валидация покупок (receipt validation) в обычном виде уже не работает — локальные покупки валидируются через Xcode, и этот механизм ложится на плечи разработчика.

В остальном Xcode покрывает большинство сценариев и задач тестирования. В статье мы рассмотрим конфигурацию и базовые сценарии для работы с новым инструментом.
Как создавать и наполнять продуктами файлы конфигурации
Для тестирования локальных покупок в Xcode нужно добавить в проект файл с конфигурацией продуктов, которые вы хотите протестировать.
Для этого в Xcode выбираем File → New → File, выбираем шаблон StoreKit Configuration file, указываем имя и сохраняем.

Далее, внизу в созданном файле нажимаем “+” и выбираем желаемый продукт в зависимости от того, какие покупки вы планируете тестировать: подписки, невозобновляемые подписки, расходуемые или нерасходуемые покупки:

Для примера выберем Auto-renewable subscription и создаём группу подписок.
Группы подписок — это подписки одного продукта, но отличающиеся по цене, периоду и уровню доступа к приложению. В пределах одной группы у пользователя может быть только одна подписка, но он может переключаться между ними.
Указываем название группы и настраиваем подписку:

-
Название подписки – так подписка будет отображена в списке слева. Больше это нигде не используется, поэтому в названии самое важное — сделать его понятным для самого себя.
-
ID продукта, обязательное поле. ID продукта дальше будет использоваться при совершении покупки. Опять же, важное сделать его понятным: например, monthly, annual, premium.
-
Цена, обязательное поле.
-
Длительность подписки, обязательное поле.
-
Включить или выключить family sharing. Эта функция появилась, начиная с iOS 14, опциональное поле.
-
Introductory offer — начальная цена подписки, можно указать желаемый или оставить пустым, опциональное поле.
-
Рromotional offers, можно указать желаемые или оставить пустой список, опциональное поле.
-
Локализация: заголовок и описание. Как приложение будет названо и описано в App Store разных регионов.
Как включать и выключать локальное тестирование покупок
Теперь, когда продукты добавлены, можно приступать к тестированию.
В Xcode выбираем Edit scheme → Options

В меню StoreKit Configuration вы увидите список конфигурационных файлов, доступных для тестирования. В нашем случае это Configuration.storekit, который мы создали на первом шаге. Чтобы выключить тестирование, нужно выбрать none.
Пример покупки с тестовой транзакцией
Дальше тестируем покупку. Для этого в Xcode совершите покупку продукта, который вы указали в файле конфигурации. Про совершение покупок мы уже писали в одной из статей нашей серии.
Начиная с Xcode 12 появилась возможность управления тестовыми покупками. Вы можете отслеживать все тестовые покупки и транзакции, отклонять и подтверждать покупки, совершать возвраты и многое другое прямо в интерфейсе Xcode.
Чтобы начать работу над тестовыми покупками, надо, чтобы приложение было запущено. Далее в меню выберите Debug → StoreKit → Manage Transactions. В появившемся окне вы увидите список тестовых транзакций, совершенных локально:

Настройки для тестовых покупок
С недавних пор в Xcode добавилось новое меню для управления настройками тестовых покупок:

Чтобы в него войти, нужно выбрать свой StoreKit файл и кликнуть по меню Editor. В нём есть следующие опции:
-
Default Storefront. Позволяет выбирать и переключать страны и, соответственно, валюты.
-
Default Localization. Переключение локализации для продуктов, что позволяет тестировать различные языки для названий и цен.
-
Time Rate. Позволяет регулировать период подписок. В XCode вы сами задаёте интервал, за который будет тестироваться покупка: годовую подписку можно протестировать хоть за час, хоть за минуту. Это позволяет проконтролировать множество сложных сценариев покупок.
-
Enable interrupted purchases. Позволяет тестировать прерванные покупки, которые требуют от пользователя какого-то дополнительного действия во время покупки. Например, для пользователей из Европы запрашивается дополнительное подтверждение для транзакций свыше €30.
-
Fail transactions позволяет явно вызывать определенные ошибки.
-
Enable ask to buy. Включение дополнительного запроса на разрешение покупки.
-
Subscription Offers Key. Ключ для подписи промо офферов.
-
Save Public Certificate. Используется для локальной валидации рецепта пользователя (подтверждении информации о его покупках)
Ask to buy для покупок с Family Sharing / Deferred покупки
StoreKit local testing позволяет тестировать прерывающиеся покупки, которые требуют подтверждения со стороны взрослого члена семьи.
Для этого выберите Editor → Enable Ask to Buy, перезапустите приложение и попробуйте что-то купить. Вы увидите алерт с возможностью запросить разрешение на покупку.

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

Управление локальными подписками: удаление, возврат
С новым инструментом можно удалять покупки, чтобы протестировать их заново (например, non-consumable), а также эмулировать отказ от подписок (refund).
Для получения уведомлений о том, что подписка была отменена или non-consumable транзакция была удалена, в StoreKit был добавлен метод, который оповещает о подобных изменениях.
func paymentQueue(_ queue: SKPaymentQueue, didRevokeEntitlementsForProductIdentifiers productIdentifiers: [String]) { syncTransactionsHistory() }
Удалить или отменить подписку можно через новое меню управления подписками, достаточно выбрать желаемую покупку и нажать на правую кнопку мыши.
При отмене или удалении, в метод делегата придет уведомление с product id отмененной подписки.
Заключение
Это были основные сценарии управления покупками и их тестирование в Xcode. Как видите, в Xcode много возможностей, а тестирование в нём проще, чем в Sandbox. В следующих статьях мы расскажем об остальных аспектах подключения покупок на iOS: промо-офферах, обработке ошибок и о том, как добавить покупки в приложение с помощью Adapty SDK.
Про Adapty
С Adapty SDK всё намного проще, чем без него, и вместе с этим вы получаете ещё много преимуществ:
-
Встроенная аналитика позволяет легко понимать главные метрики приложения.
-
Когортный анализ показывает, сходится ли экономика.
-
А/Б тесты пейволлов делаются налету и помогают увеличивать конверсию в платных пользователей.
-
Интеграции с внешними системами позволяют отправлять транзакции в сервисы атрибуции и продуктовой аналитики.
-
Промо-кампании уменьшают отток аудитории.
-
Open source SDK позволяет интегрировать подписки в приложение за несколько часов.
-
Серверная валидация и API для работы с другими платформами упрощает работу с покупками.
Познакомьтесь подробнее с этими возможностями, чтобы быстрее внедрить подписки в своё приложение и улучшить конверсии.
ссылка на оригинал статьи https://habr.com/ru/articles/571960/
Добавить комментарий