【问题标题】:Apple IAP Subscription Renewal Detection (iOS7+ receipts)Apple IAP 订阅续订检测(iOS7+ 收据)
【发布时间】:2016-10-06 18:00:48
【问题描述】:

首先,这个问题与 iOS7+ 收据有关,所以所有关于 SO 的问题/答案都涉及到 latest_receiptlatest_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


【解决方案1】:

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

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

【讨论】:

  • 有趣。所以也许这些字段毕竟没有被弃用,它只是草率的文档。感谢您指出这一点。
猜你喜欢
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
  • 1970-01-01
  • 2020-03-19
  • 1970-01-01
  • 1970-01-01
  • 2015-02-27
  • 2017-07-30
相关资源
最近更新 更多