问题描述
我正在实施SwiftyStoreKit以帮助在iOS上进行应用内购买。我有一台用于验证收据的服务器,所以我要完成的工作是:
func purchase(productId: String) {
SwiftyStoreKit.purchaseProduct(productId,quantity: 1,atomically: false) { result in
switch result {
case .success(let product):
self.validateReceiptOnServer() { (success) in
if product.needsFinishTransaction {
SwiftyStoreKit.finishTransaction(product.transaction)
}
if success {
self.updateUI()
}
else {
self.showError()
}
}
case .error(let error):
self.showError()
}
}
}
SwiftyStoreKit还提供一种应在应用程序首次启动时调用的方法。 Apple文档中也对此进行了说明。对我来说,函数看起来像这样:
func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
SwiftyStoreKit.completeTransactions(atomically: false) { purchases in
for purchase in purchases {
switch purchase.transaction.transactionState {
case .purchased:
self.validateReceiptOnServer() { (result) in
if purchase.needsFinishTransaction {
SwiftyStoreKit.finishTransaction(purchase.transaction)
}
switch result {
case .success: print("success validating receipt")
case .failure: print("failure validating receipt")
}
}
case .restored:
if purchase.needsFinishTransaction {
SwiftyStoreKit.finishTransaction(purchase.transaction)
}
case .Failed,.purchasing,.deferred: break
@unkNown default: break
}
}
}
return true
}
对于正常,不间断的购买,此设置似乎可以正常运行。我的问题是,在测试interrupted purchases时,在调用SwiftyStoreKit.purchaseProduct之后,将以某种方式触发didFinishLaunchingWithOptions中SwiftyStoreKit.completeTransactions的回调,而不是购买回调。我希望这不是故意的,因为它会使继续执行触发购买的文件中的代码变得非常麻烦。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)