我正在尝试在我的 macOS 应用程序中实现 StoreKit 的自动续订订阅功能。
在阅读了数十页并检查了示例之后,我了解了所有内容是如何组合在一起的,但未能使其正常工作。
我正在尝试做的事情:
- 应用启动后,立即通过评估本地收据检查是否有可用订阅。我专门检查了任何 In-App Purchase field entries 中取消日期的不可用性。收据的类型以及订阅到期日是否在未来。
- 如果没有(事件的)订阅可用,我将使用 StoreKit 的 API 购买订阅。
这两种情况都运行良好,因为此流程在首次购买订阅时运行良好。但是,收据不会在订阅到期日期结束后自动更新。我希望这张收据能定期更新,如 Auto-renewing subscription and app receipt 所示。 .结果,上述第一步失败了,因为某个时间点的过期日期在历史记录中,因此被认为已过期。
我觉得奇怪的两件事:
- 我的 SKPaymentTransactionObserver 实例仅在购买订阅后(在用户明确购买后)被调用。它永远不会在订阅到期时被调用并且应该自动续订(如上面的博客文章所示);
- 通过调用它的 request:didFailWithError: 委托(delegate)方法,使用 SKReceiptRefreshRequest API 明确要求更新我的收据(包含 IAP 的到期日期)失败。错误对象为 nil,所以我看不出更新失败的原因。
我可以共享代码,但我感觉这与代码无关,而是某种我没有完全理解的项目/环境设置和/或行为。
你有什么尝试的建议吗?
最佳答案
经过几天的试验,我更改了机制以使用记录在 https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-CH104-SW1 上的服务器端验证.显然,这需要在某处运行 Web 服务并使您的环境更加复杂,但至少事情以更稳定(和安全)的方式工作。
关于objective-c - 在 macOS 沙盒环境中购买自动续订订阅后收据未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40845041/