SKReceiptRefreshRequest vs restoreCompletedTransactions

我的应用程序使用订阅模式,我收到投诉,其中一些用户无法通过SKPaymentQueue.restoreCompletedTransactions恢复订阅。 他们必须删除应用程序并从AppStore重新下载。

我不确定为什么它只发生在一些用户身上,其中一个告诉我他通过itunes取消并重新启动,另一个关于付款问题。

那么为什么他们需要重新下载应用程序呢? 我猜测一些信息在收据上没有正确刷新,所以我考虑使用SKReceiptRefreshRequest而不是restoreCompletedTransactions ,或者可能同时使用两者。

有人可以解释这两个过程之间的差异吗?

SKReceiptRefreshRequestRestoreCompletedTransactions之间的SKReceiptRefreshRequest非常简单:

SKReceiptRefreshRequest

刷新收据会向App Store询问收据的最新副本。 刷新收据不会创建任何新交易。 虽然您应该避免连续多次刷新,但此操作与仅刷新一次的结果相同。

RestoreCompletedTransactions

恢复已完成的事务会为用户完成的每个已完成事务创建一个新事务,实质上是为事务队列观察者重放历史记录。 在恢复事务时,您的应用程序会维护自己的状态,以跟踪恢复已完成事务的原因以及它们如何处理它们。 多次还原会为每个已完成的事务创建多个已还原的事务。

我们可以使用SKReceiptRefreshRequest和Restore完成的事务来validation用户订阅,但在下面的情况下,我们必须使用恢复已完成的事务而不是刷新收据:

  • 如果您使用Apple托管的内容,则还原已完成的事务会为您的应用程序提供用于下载内容的事务对象。

  • 如果您需要支持早于iOS 7的iOS版本(应用程序收据不可用),请恢复已完成的事务。

  • 如果您的应用使用非续订订阅,则您的应用负责恢复过程。

参考: https //developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Restoring.html#//apple_ref/doc/uid/TP40008267-CH8-SW9