Нет данных квитанции для подписчиков автообновления подписки в Великобритании?
Я получаю отдельные сообщения о пользователях, которые приобрели мою подписку с автообновлением, и на их устройстве нет чеков. После совершения покупки я анализирую квитанцию и сохраняю дату истечения срока в 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, и я не слышал об этой проблеме за пределами Великобритании.