我的代码有问题。函数updatedTransactions仅在事务处理时调用一次.Purchasing并且在事务完成后不会调用。
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
}
}
}
答案 0 :(得分:1)
抱歉,我可能会稍晚回答,但可能与this question有关。您是否在Xcode没有达到.purchased
状态时测试您的IAP?
如果是,则需要将设备的App Store ID设置为您在iTunes Connect上创建的ID(用户菜单,沙盒测试仪)。
如果不是,那么可能是因为您的SKPaymentQueue已经包含太多等待完成的交易。您可以使用SKPaymentQueue.default().transactions
进行检查。
在我的情况下,我有28笔交易等待完成,因为我在购买阶段有一个糟糕的开关案例陈述。
如果是这种情况,您可以在viewDidLoad
中添加这些行来完成每一行(不要忘记在找到它们未在代码中完成的原因后删除它们):< / p>
for transaction: AnyObject in SKPaymentQueue.default().transactions {
SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
}