【问题标题】:Receipt does not get updated after purchasing an automatically renewable subscription in a macOS sandbox environment在 macOS 沙盒环境中购买自动续订订阅后收据未更新
【发布时间】:2017-04-12 05:15:17
【问题描述】:

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

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

我想做什么:

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

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

我觉得奇怪的两件事:

  • 我的 SKPaymentTransactionObserver 实例仅在购买订阅后(用户明确购买后)才会被调用。订阅到期时它永远不会被调用,并且应该自动续订(如上面的博客文章所示);
    • 使用 SKReceiptRefreshRequest API 明确要求我的收据(包含 IAP 的到期日期)更新失败,调用它的 request:didFailWithError: 委托方法。错误对象为 nil,所以我看不出它更新失败的原因。

我可以共享代码,但我觉得这与代码无关,而是某种我没有完全理解的项目/环境设置和/或行为。

你有什么建议可以尝试吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-12-23
      • 2017-11-26
      • 2013-05-20
      • 2013-06-30
      • 2020-03-23
      • 2018-08-02
      • 1970-01-01
      • 2011-06-29
      • 2011-01-05
      相关资源
      最近更新 更多