在英国没有自动续订的订户的收据数据吗?

时间:2018-10-20 17:25:18

标签: ios swift in-app-purchase storekit auto-renewing

我收到有关购买我的自动续订订阅的用户的零星报告,并且他们的设备上没有收据数据。购买完成后,我将解析收据并将到期日期保存到UserDefaults中。然后,每当您打开该应用程序时,我都会对照今天检查到期日期,如果比较晚,则可以访问我的内容。

我用相关代码创建了一个gist,该代码用于解析收据并保存在我的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)")
    }

}

一些用户告诉我,即使订阅了,他们也无法解锁内容(这些用户还说他们已经购买了年度订阅,我也有每月选择权)...我让一个用户安装了Beta版本, Firebase集成,以便我可以将收据和过期日期推送到控制台以查看其内容,并且看来他的设备上没有过期日期或收据。对问题是什么以及为什么在英国似乎只有这种情况有任何想法吗?我的活跃用户群大约为600,在英国以外的地区我还没有听说过这个问题。

0 个答案:

没有答案