Chi*_*hah 2 in-app-purchase ios swift3
我正在尝试使用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]) {
}
Run Code Online (Sandbox Code Playgroud)
小智 6
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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2862 次 |
| 最近记录: |