iOS自动续订订阅:收据验证流程

Rui*_*Rui 13 subscription in-app-purchase ios auto-renewing receipt-validation

我正在实现一个自动更新的订阅方案,其中收据验证将由我的服务器端代码处理.根据Apple的文档,我将从中获取收据数据NSBundle,并将该数据传递给我的服务器,该服务器将联系Apple以验证收据并通知应用程序结果.

现在我的问题与收据验证相关的必要流程有关:

  1. 如果用户购买了订阅,我的收据将自动更新来自该购买的信息?如果是这样,是否有必要在购买后立即验证收据,还是应该立即"解锁"应用程序?

  2. 在什么情况下我的收据会丢失NSBundle?如果发生这种情况,我想我应该使用SKReceiptRefreshRequest刷新收据,并将其发送到服务器进行验证.

  3. 如果用户在不同的设备上安装应用程序并恢复购买restoreCompletedTransactions,我是否会同时自动获取收据?我想我需要在恢复后验证收据,以确保有一个有效的订阅,对吗?

  4. 当我的服务器尝试验证收据,并且该收据无效时,应用程序端会发生什么?刷新收据(将要求用户提供凭据)并再次将其传递给服务器以进行新的重新验证?

Mar*_*ock 12

如果用户购买了订阅,我的收据将自动更新来自该购买的信息?

是的,收据本质上是存储在设备上的文件,在购买之后,收据文件被更新并附加最新的交易.

如果是这样,是否有必要在购买后立即验证收据,还是应该立即"解锁"应用程序?

这取决于您对欺诈的关注程度.有许多工具可用于破解在监狱破坏的设备上的应用内购买,而不验证可以允许用户免费访问您的内容.如果这是一个问题,请在解锁内容之前验证您的收据.

我的收据在什么情况下会从NSBundle中丢失?

如果在购买过程中用户失去连接,则收据数据可能无法完全下载,从而使您收到不完整的收据.我怀疑还有其他情况,但我自己并没有遇到任何情况.

如果发生这种情况,我想我应该使用SKReceiptRefreshRequest刷新收据,并将其发送到服务器进行验证.

是的,但请记住,这只会更新收据文件,然后您需要appStoreReceiptURL再次调用以从文件中检索收据.

如果用户在不同的设备上安装应用程序并恢复他的购买restoreCompletedTransactions,我是否会同时自动获取收据?

收据文件将被更新,但您需要致电appStoreReceiptURL以获取收据.

我想我需要在恢复后验证收据,以确保有一个有效的订阅,对吗?

是的,好主意.

当我的服务器尝试验证收据,并且该收据无效时,应用程序端会发生什么?刷新收据(将要求用户提供凭据)并再次将其传递给服务器以进行新的重新验证?

我会告诉用户您不相信收据有效并提供重试选项.致电SKReceiptRefreshRequest,再次将收据发送到您的服务器.如果随后失败,则再次显示该选项.

如果用户进行了欺诈性购买,我怀疑他们会向您或Apple投诉.