2
我正尝试在Swift 3的应用内购买产品。我可以成功在我的测试设备上进行付款。点击时,屏幕顶部的恢复按钮应恢复所有以前的购买。这里是我用来恢复的代码。我的队列中的函数总是空的。请帮我解决这个问题。使用Swift恢复应用内购买3
func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
for transaction in queue.transactions{
let trans: SKPaymentTransaction = transaction as SKPaymentTransaction
let prodID = trans.payment.productIdentifier as String
switch prodID {
case "some_iap":
print("Do something")
finishTransaction(trans)
default: break
}
}
updatePurchases()
}
func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) {
print("error in restore")
}
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for trans in queue.transactions{
let trans: SKPaymentTransaction = trans as SKPaymentTransaction
print(trans.transactionState.rawValue)
switch (trans.transactionState) {
case .purchased:
let prodID = p.productIdentifier as String
switch prodID {
case "some_iap":
print("do something")
updatePurchases()
finishTransaction(trans)
default:
print("defualt")
finishTransaction(trans)
}
case .failed: break
default: break
}
}
}
func finishTransaction(_ trans:SKPaymentTransaction){
SKPaymentQueue.default().finishTransaction(trans)
SKPaymentQueue.default().remove(self)
}
func paymentQueue(_ queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]) {
}
已表示,该代码可能是脆弱的,并可能允许任何人恢复自由购买,而不在第一时间为他们支付。真的吗? –
是的。每次点击恢复按钮时都会调用paymentQueueRestoreCompletedTransactionsFinished。所以你需要检查标识符,然后恢复 –
@BradLarson正确实施的更新答案。它只会在用户已经购买时恢复。备查 –