首先,这个问题与iOS7收据有关,因此SO上涉及latest_receipt和latest_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.
这一切都有道理.因此,现在一个明显的问题,Apple没有解决的问题是,如果用户没有关闭应用程序并重新启动应用程序(这会导致StoreKit将应用程序的事务发送到处理),如何确定订阅是否已续订?如果用户长时间打开应用程序,则不会收到交易,但由于到期日期已过,我无法继续提供内容.从理论上讲,用户可以让应用程序运行数月而无需重新启动.
答案是调用[NSBundle mainBundle] .appStoreReceiptURL自己获取收据然后验证它?这会提供更新的收据吗?然后当事务在下次启动时从StoreKit队列到达时,只是第二次处理相同的收据(因为没有真正的方法可以忽略它)?这看起来非常愚蠢.如果我们必须在某些情况下自己收到收据,为什么还要通过队列将它发送给我们呢?
有关正确工作流程的任何想法?
最佳答案 如果您使用Apple的验证URL验证设备的板载收据,则
JSON响应将在关键字“latest_receipt_info”中包含一个数组,该数组表示此Apple ID的最新事务列表.此列表将包括自上次更新StoreKit事务队列以来发生的任何续订.即您可以随时从设备或服务器执行此操作,以了解任何续订,并且您只需要查看交易队列以了解用户最初购买订阅的情况.
对于苹果公司文档中含糊不清的语言,这个SO答案非常有用,似乎让我们这么多人感到困惑:https://stackoverflow.com/a/35912565/492075