首先,关于这个主题的SO似乎有很多问题,但大多数似乎已经过时,并没有考虑iOS 9中提供的API .

1)如何恢复购买?

当用户在> = iOS 9上点击 Restore Purchase 按钮进行自动续订订阅时,是否应该调用 SKReceiptRefreshRequestSKPaymentQueue.defaultQueue().restoreCompletedTransactions() ?目前我验证收据文件以确定活动订阅和解析 latest_receipt_info ,是否在调用 restoreCompletedTransactions 时在设备上创建了收据文件?

2)如何验证自动续订订阅?

要验证> = iOS 9上的自动续订订阅仍处于活动状态且未取消,我会在每次用户启动应用时调用 SKReceiptRefreshRequest . 但docs说:

在您的应用中包含一些机制,让用户恢复购买,例如“恢复购买”按钮 . 恢复购买会提示用户的App Store凭据,这会中断您的应用流量:因此,请勿自动恢复购买,尤其是每次启动应用时都不会 .

我应该每天只拨打一次还是有其他方式来验证订阅?

更新:

2)刚发现这个here

在启动应用程序之后立即执行收据验证,然后再显示任何用户界面或生成任何子进程 . 在调用NSApplicationMain函数之前,在main函数中实现此检查 . 为了提高安全性,您可以在应用程序运行时定期重复此检查 .

显然,收据可以在没有用户交互的情况下进行验证 . 为了安全起见,甚至建议在自己的服务器上进行此操作 . 因此,只要收据由App Store服务器验证,就不需要收据刷新请求 .