使用Swift 3恢复应用内购买 [英] Restore in-app purchase with Swift 3
本文介绍了使用Swift 3恢复应用内购买的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用Swift 3中的应用程序购买。我可以在我的测试设备上成功付款。点击后,我在屏幕顶部有一个恢复按钮可以恢复以前的所有购买。这是我用来恢复的代码。我在函数中的队列总是空的。请帮我解决这个问题。
I am trying to work with in app purchases in Swift 3. I can successfully make payments on my test device. I have a restore button on top of the screen when clicked should restore all the previous purchases. Here is the code that I use to restore. My queue in the function is always empty. Please help me fix this.
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]) {
}
推荐答案
解决方案Swift 3
Solution for Swift 3
//Step 1 Call from button Restore Purchase
func restore() {
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().restoreCompletedTransactions()
}
//Step 2 Get transactions
public func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
switch transaction.transactionState {
case .purchased:
print("Product Purchased")
unlockApp()
SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
break;
case .failed:
print("Purchased Failed");
SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
break;
case .restored:
print("Already Purchased")
unlockApp()
SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
default:
break
}
}
}
//If an error occurs, the code will go to this function
func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) {
//Handle Error
}
这篇关于使用Swift 3恢复应用内购买的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文