我的代码有问题。 updateTransactions 函数仅在交易进行时调用一次,交易完成后不再调用。
func buyProduct(product: SKProduct) {
let payment = SKPayment(product: product)
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
SKPaymentQueue.defaultQueue().addPayment(payment)
}
func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
print(transaction)
switch (transaction.transactionState) {
case .Purchased, .Restored:
print("Completed")
complete(transaction)
break
case .Failed:
fail(transaction)
break
default:
break
}
}
}
抱歉,我可能回答得有点晚,但这可能与这个问题 https://stackoverflow.com/questions/30089908/ios-in-app-purchase-never-completes。当 IAP 未到达时,您是否正在从 Xcode 测试您的 IAP?.purchased
state?
如果是,那么您需要将设备的 App Store ID 设置为您在 iTunes Connect 上创建的 ID(用户菜单、沙盒测试仪)。
如果不是,那么可能是因为您的 SKPaymentQueue 已经包含太多等待完成的交易。你可以检查它SKPaymentQueue.default().transactions
.
就我而言,我有 28 笔交易等待完成,因为我在购买阶段有一个错误的 switch case 语句。
如果是这种情况,您可以将这些行添加到您的viewDidLoad
完成它们中的每一个(在找到它们在代码中没有完成的原因后,不要忘记删除它们):
for transaction: AnyObject in SKPaymentQueue.default().transactions {
SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)