购买IAP订阅时,交易显示错误状态

时间:2020-04-08 14:42:52

标签: swift macos in-app-purchase

我正在将我们的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)
    }

我想念什么?

0 个答案:

没有答案