【发布时间】:2023-03-27 14:40:01
【问题描述】:
我正在尝试实施自动续订产品。问题是SKPaymentQueue 不能通过调用SKPaymentQueue.defaultQueue().finishTransaction(transaction) 来完成SKPaymentTransaction。
func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
if let transactions = transactions as? [SKPaymentTransaction] {
for transaction in transactions {
switch transaction.transactionState {
case .Purchasing:
break
case .Purchased:
queue.finishTransaction(transaction) // finish transaction
self.purchasedWithTranasction(transaction)
case .Failed:
queue.finishTransaction(transaction) // finish transaction
self.failedWithTransaction(transaction)
case .Restored:
queue.finishTransaction(transaction) // finish transaction
self.restoredWithTransaction(transaction)
case .Deferred:
queue.finishTransaction(transaction) // finish transaction
}
}
}
}
如上,在paymentQueue:updatedTransactions:方法中,queue.finishTransaction(transaction)被调用。正常情况下,交易已经完成,不会再停留了。
但是当我再次运行该应用程序时,该事务仍未完成。顺便说一句,我在 AppDelegate 中设置了事务观察器,如下所示。因此,当应用程序启动时,剩余的事务将通过调用paymentQueue:updatedTransactions: 开始处理。这和我的预期不一样。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// add transaction observer
SKPaymentQueue.defaultQueue().addTransactionObserver(CargoBay.sharedManager())
....
return true
}
你们对这个问题有任何想法吗?有没有SKPaymentQueue.defaultQueue().finishTransaction(transaction)没有完成交易的情况?
【问题讨论】:
-
嗨@Mike,你有没有深入了解这个问题?
标签: swift xcode in-app-purchase storekit skpaymenttransaction