Всем привет, я Андрей, 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 для работы с другими платформами упрощает работу с покупками.
Познакомьтесь подробнее с этими возможностями, чтобы быстрее внедрить подписки в своё приложение и улучшить конверсии.