首先,这个问题与iOS7 +收据有关,因此SO上涉及latest_receipt
和latest_receipt_info
的所有问题/答案都不适用(因为它们已被弃用且正在消失)。似乎关于更新SO订阅的大部分知识库来自2011年和2012年,因此误导并为当前规范提供不正确的信息。
我知道用户当前的订阅何时到期。我想知道他们是否更新了。根据Apple续订订阅时的说法:
成功续订订阅后,Store Kit会添加一个 用于续订事务队列的事务。你的应用检查 启动时的事务队列并以相同的方式处理续订 与任何其他交易一样。请注意,如果您的应用已在运行 订阅更新时,不调用事务观察者; 您的应用在下次启动时会发现续订。
这一切都有道理。因此,现在一个明显的问题,Apple没有解决的问题是,如果用户没有关闭应用程序并重新启动应用程序(这会导致StoreKit将应用程序的事务发送到处理),如何确定订阅是否已续订?如果用户长时间打开应用程序,则不会收到交易,但由于到期日期已过,我无法继续提供内容。理论上,用户可以在不重新启动的情况下让应用程序运行数月。
致电[NSBundle mainBundle].appStoreReceiptURL
的答案是自己获取收据然后验证吗?这会提供更新的收据吗?然后当事务在下次启动时从StoreKit队列到达时,只是第二次处理相同的收据(因为没有真正的方法可以忽略它)?这看起来非常愚蠢。如果我们在某些情况下必须自己收到收据,为什么还要通过队列将它发送给我们呢?
关于正确工作流程的任何想法?
答案 0 :(得分:1)
如果使用Apple的验证URL验证设备的板载收据,则JSON响应将在键'latest_receipt_info'中包含一个数组,表示此Apple ID的最新事务列表。此列表将包括自上次更新StoreKit事务队列以来发生的任何续订。即您可以随时从设备或服务器执行此操作,以了解任何续订,并且您只需要查看交易队列以了解用户最初购买订阅的信息。
这个答案非常有用,因为Apple的文档中含糊不清的语言似乎让我们很多人感到困惑:https://stackoverflow.com/a/35912565/492075