Objective c 在macOS沙盒环境中购买自动续订后,收据不会更新

Objective c 在macOS沙盒环境中购买自动续订后,收据不会更新,objective-c,in-app-purchase,storekit,macos-sierra,receipt,Objective C,In App Purchase,Storekit,Macos Sierra,Receipt,我正在尝试在macOS应用程序中实现StoreKit自动更新订阅的功能 在阅读了几十页并检查了一些例子之后,我理解了所有东西是如何组合在一起的,但却无法使其正确工作 我想做的是: 应用程序启动后,通过评估本地收据检查活动订阅是否可用。我特别检查收据中的任何一个取消日期是否可用,以及订阅到期日期是否在未来 如果没有(活动)订阅可用,我将使用StoreKit的API购买订阅 这两种方案都可以正常工作,因为当首次购买订阅时,此流程可以完美工作。但是,在订阅到期日结束后,收据不会自动更新。我希望这张收据

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

在阅读了几十页并检查了一些例子之后,我理解了所有东西是如何组合在一起的,但却无法使其正确工作

我想做的是:

  • 应用程序启动后,通过评估本地收据检查活动订阅是否可用。我特别检查收据中的任何一个取消日期是否可用,以及订阅到期日期是否在未来
  • 如果没有(活动)订阅可用,我将使用StoreKit的API购买订阅
  • 这两种方案都可以正常工作,因为当首次购买订阅时,此流程可以完美工作。但是,在订阅到期日结束后,收据不会自动更新。我希望这张收据能定期更新,如图所示。因此,上述第一步失败,因为某个时间点的过期日期在历史记录中,因此被视为过期

    有两件事我觉得很奇怪:

    • 我的SKPaymentTransactionObserver实例仅在购买订阅后(在用户明确购买订阅后)才会被调用。当订阅到期时,它不会被调用,并且应该自动续订(如上面的博文所示);
      • 使用SKReceiptRefreshRequestAPI显式请求更新我的收据(包含IAP的过期日期)失败,方法是调用它的request:didFailWithError:delegate方法。错误对象为nil,因此我看不出它更新失败的原因
    我可以分享代码,但我有一种感觉,这与代码无关,而是我没有完全理解的某种项目/环境设置和/或行为


    您对尝试什么有什么建议吗?

    经过几天的实验,我改变了机制,使用上记录的服务器端验证。显然,这需要一个运行在某处的web服务,使您的环境更加复杂,但至少可以以更稳定(和安全)的方式工作