【发布时间】:2016-10-06 18:00:48
【问题描述】:
首先,这个问题与 iOS7+ 收据有关,所以所有关于 SO 的问题/答案都涉及到 latest_receipt 和 latest_receipt_info 不适用(因为它们已被弃用并且即将消失)。似乎有关在 SO 上续订订阅的大部分知识库来自 2011 年和 2012 年,因此具有误导性,并为当前规范提供了不正确的信息。
我知道我用户的当前订阅何时到期。我想知道他们是否更新了它。根据 Apple 续订时的说法:
订阅成功续订后,Store Kit 会添加一个 交易队列的续订。您的应用程序检查 启动时的事务队列并以相同的方式处理更新 与任何其他交易一样。请注意,如果您的应用程序已经在运行 订阅更新时,不调用事务观察者; 您的应用会在下次启动时发现续订。
这一切都说得通。所以现在苹果没有解决的一个显而易见的问题是,如果用户没有关闭应用程序并重新启动它(这导致 StoreKit 向应用程序发送要处理的事务),我如何确定订阅是否已续订?如果用户长时间打开应用程序,则不会收到交易,但由于过期日期已过,我无法继续提供内容。理论上,用户可以让应用程序运行数月而无需重新启动。
是拨打[NSBundle mainBundle].appStoreReceiptURL自己获取收据然后验证的答案吗?这会提供更新的收据吗?然后,当交易在下次启动时从 StoreKit 队列到达时,只需再次处理相同的收据(因为没有真正的方法可以忽略它)?这看起来很笨拙。如果在某些情况下我们必须自己获取收据,为什么还要通过队列将其发送给我们呢?
对正确的工作流程有什么想法吗?
【问题讨论】:
-
这几乎就是我所做的。我设置了一个触发订阅检查的计时器(开发中 10 分钟,生产中 12 小时)。它会扫描活动订阅以查找任何已过期的订阅。如果有任何过期,则它使用
[NSBundle mainBundle].appStoreReceiptURL刷新活动订阅。 -
这就是我的想法,但这使得 Apple 的续订通知系统完全没用,而且比有用更烦人。我觉得我错过了一些东西,因为 Apple 不建议这样做。
-
我猜他们正在考虑像杂志应用这样的订阅,人们可以在其中进出应用。在我的情况下,我正在使用通常在专用 iPad 上使用的企业应用程序的订阅,所以就像你的情况一样,设备很可能会长时间运行同一个应用程序。不过,老实说,我不认为这有什么大不了的。编写代码大约需要 5 分钟。
-
我关心的不是编码复杂性。这是苹果说做一件事,但解决方案是做另一件事,因此担心我错过了一些东西。
标签: ios in-app-purchase storekit