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

标签 objective-c in-app-purchase storekit macos-sierra receipt

我正在尝试在我的 macOS 应用程序中实现 StoreKit 的自动续订订阅功能。

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

我正在尝试做的事情:

  1. 应用启动后,立即通过评估本地收据检查是否有可用订阅。我专门检查了任何 In-App Purchase field entries 中取消日期的不可用性。收据的类型以及订阅到期日是否在未来。
  2. 如果没有(事件的)订阅可用,我将使用 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/

相关文章:

ios - 使用搜索在 App 内启动 iTunes Store

ios5 - 在 iOS 模拟器上从 AppStore 注销

ios - Apple IAP 订阅续订检测(iOS7+收据)

objective-c - 如何在 swift 中编写 HID 函数 Handle_DeviceMatchingCallback?

android - 可以在免费的 Android 应用中提供应用内购买吗?

android - Google 应用内结算 : Can't query subscription details

android - 使用 Flutter 确认购买

objective-c - 使用Apple的外部附件API捕获数据流

ios - 使用 RestKit 的嵌套对象映射

ios - 有没有办法检测最接近点击位置的 UIButton?