Я использую StoreView от StoreKit для покупок в приложении. Покупка работает в симуляторе, но как восстановить покупки? Я не нашел обработчик восстановления, есть только onInAppPurchaseCompletion, но мне не хватает onRestorePurchaseCompletion или подобного.
Вот как это выглядит
Это мой код:
StoreView(ids: ["my.product.id"])
.storeButton(.visible, for: .restorePurchases)
.storeButton(.hidden, for: .cancellation)
.onInAppPurchaseCompletion { product, result in
if case .success(.success(let transaction)) = result {
print("Purchased successfully: \(transaction.signedDate)")
isPremium = true
} else {
print("Something went wrong")
}
}





При использовании пользовательского интерфейса StoreKit 2 кнопка «Восстановить покупки» ведет себя так же, как вызов AppStore.sync()
Это загружает права из App Store. Таким образом, обработчик для него не предусмотрен, поскольку любые недостающие права должны быть добавлены как успешно завершенная покупка в обработчике onInAppPurchaseCompletion. Кроме того, все недостающие права также будут добавлены в Transaction.currentEntitlements после того, как пользователь нажмет кнопку и пройдет аутентификацию в App Store.
Подробнее об этом поведении можно прочитать в этом посте и здесь.
Если вы используете StoreKit Testing в Xcode, вам следует использовать конфигурации тестирования, описанные здесь . Например, вы можете установить сетевую ошибку при покупке и попытаться восстановить покупку с помощью кнопки восстановления, чтобы проверить вашу функциональность. Удаление приложения приведет к отмене связи предыдущей транзакции с приложением, как описано здесь.
Как я могу протестировать восстановление нерасходуемого предмета? Когда я совершаю покупку в симуляторе, кнопка покупки неактивна, как и ожидалось. После удаления и переустановки приложения я могу купить его снова (я ожидаю появления ошибки типа «у вас уже есть этот продукт»). Нажатие на кнопку «Восстановить» ничего не дает.