我正在将我们的iOS应用移植到MacO,并且遇到了一个奇怪的问题。当我购买自动续订的订阅时,给定交易的交易状态不是.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。用户现在必须去再次单击“还原购买”以激活购买,这不是理想的选择。
如果交易的状态正确,则将导致以下情况:
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)
}
我想念什么?