Работали ли с подписками и покупками через StoreKit или другие сервисы
Что проверяют
Биллинг это место, где ошибка стоит денег и отзывов в сторе, поэтому вопрос отсеивает тех, кто видел покупки только в туториале. Смотрят, понимаете ли вы, что покупка не заканчивается на успешном алерте: есть проверка прав, продление, отмена, возврат и восстановление на новом устройстве.
Как отвечать
Опишите полный цикл на StoreKit 2, он доступен начиная с iOS 15 и убирает почти всю ручную работу с чеками.
- Загрузка:
Product.products(for:)по идентификаторам из App Store Connect, цена и период берутся из ответа, а не из кода. - Покупка:
try await product.purchase(), результат приходит какVerificationResult, подпись проверяет система, после выдачи контента обязательноawait transaction.finish(). - Права: текущее состояние подписки читается из
Transaction.currentEntitlements, а не из локального флага. - Фоновые события: слушатель
Transaction.updatesподнимается на старте приложения, иначе покупка, завершившаяся вне приложения, потеряется. - Сервер: если контент отдаёт бэкенд, он проверяет транзакцию сам через App Store Server API и слушает серверные уведомления о продлении, возврате и смене плана.
- Восстановление:
AppStore.sync()по кнопке, наличие такой кнопки требуют правила ревью.
Про тестирование скажите отдельно: локальная конфигурация StoreKit в Xcode для сценариев и sandbox-аккаунт для полной проверки.
Где спотыкаются
Не завершают транзакцию. Незакрытая покупка возвращается в очередь при каждом запуске, пользователь видит повторные запросы, а деньги в спорных случаях уходят обратно.
Хранят факт подписки в UserDefaults после успешной покупки. Такой флаг подделывается за минуту, и премиум раздаётся бесплатно, а на новом устройстве наоборот пропадает у честно оплативших.
Третье: проверяют только счастливый путь. Отмена, ожидание родительского подтверждения, возврат, апгрейд с пересчётом и льготный период при неудачном списании не обрабатываются, и подписчик внезапно теряет доступ.