ced*_*ced 6 in-app-purchase ios swift skpaymenttransaction
我在 Swift 4/iOS 11 中恢复 IAP 时遇到问题。我的AppDelegate实现SKPaymentTransactionObserver. AppDelegate我正在didFinishLaunchingWithOptions打电话SKPaymentQueue.default().add(self)。我paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction])也在 AppDelegate 中实现了该功能。
我可以ViewController像这样进行购买:
let payment = SKPayment(product: products.first!)
SKPaymentQueue.default().add(payment)
Run Code Online (Sandbox Code Playgroud)
购买成功完成 - 我在观察者中得到了updatedTransactionwith 状态。.purchasedpaymentQueue
但是,当我从中调用以下内容ViewController以恢复购买时:
SKPaymentQueue.default().restoreCompletedTransactions()
Run Code Online (Sandbox Code Playgroud)
该paymentQueue updatedTransactions函数从未被调用。
看来我的沙箱用户等设置正确,因为初始购买正在运行。沙盒用户有能力恢复购买吗?restoreCompletedTransactions()除了打电话恢复购买之外,我还需要做任何额外的工作吗?
更新,这是我的paymentQueue updatedTransactions代码AppDelegate:
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions{
switch transaction.transactionState{
case .purchased:
debugPrint("purchased it!")
menuDelegate?.unlockMenu()
//unlock the content, then
SKPaymentQueue.default().finishTransaction(transaction)
break
case .failed:
debugPrint("failed")
SKPaymentQueue.default().finishTransaction(transaction)
break
case .restored:
debugPrint("restored")
menuDelegate?.unlockMenu()
//unlock the content, then
SKPaymentQueue.default().finishTransaction(transaction)
break
case .purchasing:
debugPrint("purchasing...")
break
case .deferred:
debugPrint("deferred...")
break
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1633 次 |
| 最近记录: |