在 macOS 沙盒环境中购买自动续订订阅后收据未更新

Receipt does not get updated after purchasing an automatically renewable subscription in a macOS sandbox environment

我正在尝试实现 StoreKit 的功能,以便在我的 macOS 应用程序中自动更新订阅。

阅读几十页并查看示例后,我了解了所有内容是如何组合在一起的,但未能使其正常工作。

我想做什么:

  1. 应用程序启动后,立即通过评估本地收据检查是否有可用订阅。我正在专门检查收据的任何 In-App Purchase field entries 中的取消日期是否可用以及订阅到期日期是否在未来。
  2. 如果没有可用的(有效)订阅,我将使用 StoreKit 的 APIs 购买订阅。

这两种情况都运行良好,因为此流程在首次购买订阅时运行良好。但是,收据不会在订阅到期日期结束后自动更新。我希望这张收据能够定期更新,如 中所示。结果,上述第一步失败,因为某个时间点的过期日期在历史记录中,因此被认为已过期。

有两件事我觉得很奇怪:

我可以分享代码,但我感觉这与代码无关,而是某种 project/environment 设置 and/or 我不完全理解的行为。

你有什么尝试的建议吗?

经过几天的试验,我更改了使用 https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-CH104-SW1 上记录的服务器端验证的机制。显然,这需要某处的 Web 服务 运行 并使您的环境更加复杂,但至少事情以更稳定(和安全)的方式工作。