InAppPurchase: загрузка размещенного контента из AppDelegate
Я пытаюсь реализовать In App Purchase с размещенным контентом на серверах Apple. Я использую фреймворк SwiftyStoreKit.
Обычно, согласно другим учебным пособиям, нам нужно выполнить вызов загрузки в: func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
Итак, я реализовал следующий код в этой функции:
let downloads = transaction.downloads
SKPaymentQueue.defaultQueue().startDownloads(downloads)
Это работает, и теперь я пытаюсь в AppDelegate проверить, является ли статус предыдущей транзакции "купленным", но не "законченным". Это означает, что пользователь купил продукт, но возникла проблема с загрузкой.
Вот мой код.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
completeIAPTransactions()
return true
}
func completeIAPTransactions() {
SwiftyStoreKit.completeTransactions(atomically: false) { products in
for product in products {
if product.transaction.transactionState == .purchased || product.transaction.transactionState == .restored {
if product.needsFinishTransaction {
// Deliver content from server, then:
let downloads = transaction.downloads
SKPaymentQueue.defaultQueue().startDownloads(downloads)
SwiftyStoreKit.finishTransaction(product.transaction)
}
print("purchased: \(product.productId)")
}
}
}
}
Проверка работает, но есть проблема с загрузкой:
Значение типа PaymentTransaction еще не загружено.
Вопрос в том, как правильно запустить загрузку контента, когда я не в paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction])
Любая помощь будет оценена.
1 ответ
Если кто-то сталкивается с этой проблемой, вам нужно скачать ветку master из репозитория, а не полагаться на cocoapods.
pod 'SwiftyStoreKit', :git => "https://github.com/bizz84/SwiftyStoreKit.git"
Причина ошибки заключается в том, что по какой-то причине не все файлы копируются при запуске установки pod. Возможно, на вашем компьютере есть кешированная версия.