Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 购买IAP订阅时,事务显示错误的状态_Swift_Macos_In App Purchase - Fatal编程技术网

Swift 购买IAP订阅时,事务显示错误的状态

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 {

我正在将我们的iOS应用程序移植到MacOs上,遇到了一个奇怪的问题。当我购买自动续费订阅时,给定事务的事务状态不是
.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)
    }
请问我错过了什么