ios - Apple IAP 订阅续订检测(iOS7+收据)

标签 ios in-app-purchase storekit

首先,这个问题与 iOS7+ 收据有关,因此所有关于 latest_receiptlatest_receipt_info 的问题/答案都不适用(因为它们已被弃用并且正在离开)。似乎关于在 SO 上续订订阅的大部分知识库来自 2011 年和 2012 年,因此具有误导性并为当前规范提供了不正确的信息。

我知道我用户的当前订阅何时到期。我想知道他们是否更新了它。根据 Apple 在续订订阅时的说法:

After a subscription is successfully renewed, Store Kit adds a transaction for the renewal to the transaction queue. Your app checks the transaction queue on launch and handles the renewal the same way as any other transaction. Note that if your app is already running when the subscription renews, the transaction observer is not called; your app finds out about the renewal the next time it’s launched.

这一切都是有道理的。所以现在苹果没有解决的一个明显问题是,如果用户没有关闭应用程序并重新启动它(这会导致 StoreKit 向应用程序发送交易以进行处理),我如何确定订阅是否已续订?如果用户长时间打开应用程序,将不会收到交易,但我无法继续提供内容,因为到期日期已过。理论上,用户可以让应用程序运行数月而无需重新启动。

答案是调用[NSBundle mainBundle].appStoreReceiptURL 自己获取收据然后验证吗?这会提供更新的收据吗?然后,当事务在下次启动时从 StoreKit 队列到达时,只需再次处理同一张收据(因为没有真正的方法可以忽略它)?这看起来很笨拙。如果在某些情况下我们必须自己获取收据,为什么还要费心通过队列将其发送给我们呢?

对正确的工作流程有什么想法吗?

最佳答案

如果您使用 Apple 的验证 URL 验证设备的板载收据,则 JSON 响应将在键“latest_receipt_info”处包含一个数组,表示此 Apple ID 的最新交易列表。此列表将包括自上次更新 StoreKit 事务队列以来发生的任何续订。 IE。您可以随时从设备或服务器执行此操作,以了解任何续订,您只需查看交易队列即可了解用户首次购买订阅的情况。

这个 SO 答案对于 Apple 文档中的模棱两可的语言非常有帮助,这似乎让我们很多人感到困惑:https://stackoverflow.com/a/35912565/492075

关于ios - Apple IAP 订阅续订检测(iOS7+收据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37669106/

相关文章:

Android 检查设备是否支持应用内计费

ios - 在应用程序购买观察者中恢复调用 addPayment 而不是恢复

iPhone 3G 4.2.1 - SKProductsRequest 委托(delegate)方法未被调用

ios - 如何恢复非续订的 Apple 订阅

ios - 没有这样的模块 'GoogleMobileAds'

ios - UIsearchbar 在它下面显示一条永远不会消失的线

ios - 在我的 iOS 应用程序中访问设备的所有照片

ios - 移动和动画 UIView

ios - Swift:如何将Date()转换为苹果服务器的时区以验证收据?

ios - 用户付费升级后如何更新应用程序