Нет данных квитанции для подписчиков автообновления подписки в Великобритании?

Я получаю отдельные сообщения о пользователях, которые приобрели мою подписку с автообновлением, и на их устройстве нет чеков. После совершения покупки я анализирую квитанцию ​​и сохраняю дату истечения срока в UserDefaults, Затем, когда вы открываете приложение, я проверяю дату истечения срока на сегодняшний день, а если позже, вы можете получить доступ к моему контенту.

Я создал суть с соответствующим кодом, который анализирует квитанцию ​​и сохраняет значение expireDate, которое запускается при покупке дескриптора моего appDelegate:

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, и я не слышал об этой проблеме за пределами Великобритании.

0 ответов

Другие вопросы по тегам