SKReceiptRefreshRequest vs restoreCompletedTransactions

时间:2016-11-30 20:08:34

标签: ios macos storekit

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

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

那为什么他们需要重新下载应用程序?我猜测收据上的某些信息没有正确刷新,因此我考虑使用SKReceiptRefreshRequest代替restoreCompletedTransactions,或者可能同时使用这两种信息。

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

1 个答案:

答案 0 :(得分:13)

SKReceiptRefreshRequestRestoreCompletedTransactions之间的区别非常简单:

<强> SKReceiptRefreshRequest

  

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

<强> RestoreCompletedTransactions

  

恢复已完成的交易会为每个交易创建一个新交易   用户完成的交易,基本上重播历史记录   你的事务队列观察者。正在进行交易   恢复,您的应用程序保持自己的状态,以跟踪它的原因   恢复已完成的事务以及它们如何处理它们。   多次还原会为其创建多个还原的事务   每个完成的交易。

我们可以同时使用SKReceiptRefreshRequest和&amp;恢复已完成的事务以验证用户订阅,但在下面的情况下,我们必须使用恢复已完成的事务而不是刷新收据:

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

  • 如果您需要支持早于iOS 7的iOS版本,但应用收据不可用,请改为恢复已完成的交易。

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

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