首页 > 解决方案 > 英国自动续订订阅者没有收据数据?

问题描述

我收到关于购买我的自动续订订阅的用户的零星报告,但他们的设备上没有收据数据。购买后,我解析收据并将过期日期保存到UserDefaults. 然后,每当您打开应用程序时,我都会检查今天的过期日期,如果是以后,您可以访问我的内容。

我用我的相关代码创建了一个要点,它解析收据并保存在我的 appDelegate 的句柄购买中启动的 expireDate:

extension AppDelegate: SKPaymentTransactionObserver {

    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)
            }
        }
    }

    func handlePurchasingState(for transaction: SKPaymentTransaction, in queue: SKPaymentQueue) {
        print("User is attempting to purchase product id: \(transaction.payment.productIdentifier)")
    }

    func handlePurchasedState(for transaction: SKPaymentTransaction, in queue: SKPaymentQueue) {
        print("User purchased product id: \(transaction.payment.productIdentifier)")

        queue.finishTransaction(transaction)
        SubscriptionService.shared.uploadReceipt { (success) in
            DispatchQueue.main.async {
                //self.updateWatchContext()
                NotificationCenter.default.post(name: SubscriptionService.purchaseSuccessfulNotification, object: nil)
            }
        }
    }

    func handleRestoredState(for transaction: SKPaymentTransaction, in queue: SKPaymentQueue) {
        print("Purchase restored for product id: \(transaction.payment.productIdentifier)")
        queue.finishTransaction(transaction)
        SubscriptionService.shared.uploadReceipt { (success) in
            DispatchQueue.main.async {
                NotificationCenter.default.post(name: SubscriptionService.restoreSuccessfulNotification, object: nil)
            }
        }
    }

    func handleFailedState(for transaction: SKPaymentTransaction, in queue: SKPaymentQueue) {
        queue.finishTransaction(transaction)  //The RW tutorial did NOT finish the transaction, but iOS Slack said I should 
        print("Purchase failed for product id: \(transaction.payment.productIdentifier) on \(String(describing: transaction.transactionDate)) and this transaction is currently listed as \(transaction.transactionState) because of this error \(String(describing: transaction.error))")
    }

    func handleDeferredState(for transaction: SKPaymentTransaction, in queue: SKPaymentQueue) {
        print("Purchase deferred for product id: \(transaction.payment.productIdentifier)")
    }

}

一些用户告诉我,即使他们订阅了他们也无法解锁内容(这些用户还说他们已经购买了年度订阅,我也有包月选项)...我让一个用户安装了带有 Firebase 集成的测试版这样我就可以将收据和过期日期推送到控制台以查看它的内容,并且他的设备上似乎没有过期日期或收据。关于问题是什么以及为什么这似乎只发生在英国的任何想法?我的活跃用户群大约有 600 人,我在英国以外没有听说过这个问题。

标签: iosswiftin-app-purchasestorekitauto-renewing

解决方案


推荐阅读