ios - 英国自动续订订阅者没有收据数据?
问题描述
我收到关于购买我的自动续订订阅的用户的零星报告,但他们的设备上没有收据数据。购买后,我解析收据并将过期日期保存到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 人,我在英国以外没有听说过这个问题。
解决方案
推荐阅读
- python - 二十一点游戏中导致循环错误和无限滚动
- c# - .NET Core 3.1 - RSA.ImportRSAPrivateKey 引发 CryptographicException
- ruby-on-rails - 如何通过角色和电影设计 has_many:在 Rails 6 中
- apache-kafka - 我可以通过现有的 CLI 获得一个简单的独立 Kafka Producer,而无需拖入整个 Kafka 代理库吗
- flutter - 在颤振应用程序中添加 Alan_AI 依赖项会导致错误
- ios - Xamarin iOS 和 iOS 14 UISplitViewController 三列
- reactjs - 增量静态再生中的重新验证过程如何工作?
- python-3.x - 通过移动所有应用程序模型,将Django项目转换为MVC(模型,视图,控制)结构,查看不同文件夹中的文件
- javascript - 使用字段名称的 indexedDB 读取游标
- amazon-s3 - 在现有 S3 存储桶上部署时没有触发 Lambda