Swift 购买IAP订阅时,事务显示错误的状态
我正在将我们的iOS应用程序移植到MacOs上,遇到了一个奇怪的问题。当我购买自动续费订阅时,给定事务的事务状态不是Swift 购买IAP订阅时,事务显示错误的状态,swift,macos,in-app-purchase,Swift,Macos,In App Purchase,我正在将我们的iOS应用程序移植到MacOs上,遇到了一个奇怪的问题。当我购买自动续费订阅时,给定事务的事务状态不是.purchased,而是.restored。这毫无意义 @objc func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transaction in transactions {
.purchased
,而是.restored
。这毫无意义
@objc func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
switch transaction.transactionState {
case .purchasing:
handlePurchasingState(for: transaction, in: queue)
case .purchased:
handlePurchasedState(for: transaction, in: queue)
case .restored:
handleRestoredState(for: transaction, in: queue)
case .failed:
handleFailedState(for: transaction, in: queue)
case .deferred:
handleDeferredState(for: transaction, in: queue)
@unknown default:
SwiftyBeaver.debug("Payment: unknown error")
}
}
}
这将错误地导致以下功能:
func handleRestoredState(for transaction: SKPaymentTransaction, in queue: SKPaymentQueue) {
SKPaymentQueue.default().finishTransaction(transaction)
}
但由于没有要恢复的内容,因此也不会调用最终函数:
@objc func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
// once all items are restored, this gets called here:
verifyWithTegantAPI()
}
因此我们的Api没有被调用。用户现在必须再次点击Restore Purchases以激活购买,这一点并不理想
如果事务具有正确的状态,则会导致以下情况:
func handlePurchasedState(for transaction: SKPaymentTransaction, in queue: SKPaymentQueue) {
SKPaymentQueue.default().finishTransaction(transaction)
verifyWithServerAPI()
}
购买本身是这样发生的:
func purchase(subscription: Subscription) {
SwiftyBeaver.debug(subscription.product.productIdentifier)
let payment = SKPayment(product: subscription.product)
SKPaymentQueue.default().add(payment)
}
请问我错过了什么