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

时间:2014-09-16 11:00:12

标签: ios in-app-purchase subscription auto-renewing receipt-validation

我正在实施自动续订订阅方案,其中收据验证将由我的服务器端代码处理。在Apple documentation之后,我将从NSBundle获取收据数据,并将该数据传递给我的服务器,该服务器将与Apple联系以验证收据并通知应用程序结果。

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

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

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

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

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

1 个答案:

答案 0 :(得分:12)

  

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

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

  

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

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

  

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

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

  

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

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

  

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

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

  

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

是的,好主意。

  

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

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

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