iOS 自动更新订阅:收据验证流程
Posted
技术标签:
【中文标题】iOS 自动更新订阅:收据验证流程【英文标题】:iOS auto-renewable subscriptions: receipt validation flows 【发布时间】:2014-11-10 02:22:24 【问题描述】:我正在实现一个自动续订订阅方案,其中收据验证将由我的服务器端代码处理。按照 Apple 的documentation,我将从NSBundle
获取收据数据,并将该数据传递到我的服务器,服务器将联系Apple 验证收据并通知应用程序结果。
现在我的问题与收据验证相关的必要流程有关:
如果用户购买了订阅,我的收据是否会自动更新为购买的信息?如果是这样,是否有必要在购买后立即验证收据,还是应该立即“解锁”应用?
在什么情况下NSBundle
会丢失我的收据?如果发生这种情况,我想我应该使用SKReceiptRefreshRequest
刷新收据,并将其发送到服务器进行验证。
如果用户在不同的设备上安装应用程序并恢复他的购买restoreCompletedTransactions
,我是否会同时自动获得收据?我想我需要在恢复后验证收据以确保订阅有效,对吗?
当我的服务器尝试验证收据并且该收据无效时,应用程序端会发生什么?刷新收据(这将要求用户提供凭据)并再次将其传递给服务器以进行新的重新验证?
【问题讨论】:
瑞,你已经弄清楚这其中的来龙去脉了吗?如果您(或其他人)可以提供这个问题的答案,那就太好了。 您也可以查看此关于收据验证的常见问题解答:blog.apphud.com/receipt-validation 【参考方案1】:如果用户购买了订阅,我的收据会自动更新为购买的信息吗?
是的,收据本质上是存储在设备上的文件,购买后收据文件会更新并附加最新交易。
如果是这样,是否有必要在购买后立即验证收据,还是我应该立即“解锁”应用程序?
这取决于您对欺诈的关注程度。有许多工具可用于破解越狱设备上的应用内购买,并且不验证可以让用户免费访问您的内容。如果这是一个问题,请在解锁内容之前验证您的收据。
在什么情况下我的收据会从 NSBundle 中丢失?
如果用户在购买过程中断开连接,收据数据可能无法完全下载,从而导致您收到不完整的收据。我怀疑还有其他情况,但我自己还没有遇到过。
如果发生这种情况,我想我应该使用 SKReceiptRefreshRequest 刷新收据,并将其发送到服务器进行验证。
是的,但请记住,这只会更新收据文件,然后您需要再次致电 appStoreReceiptURL
以从文件中检索收据。
如果用户在不同的设备上安装应用程序并恢复他的购买 restoreCompletedTransactions 我是否会同时自动获得收据?
收据文件将被更新,但您需要致电appStoreReceiptURL
获取收据。
我想我需要在恢复后验证收据以确保订阅有效,对吗?
是的,好主意。
当我的服务器尝试验证收据并且该收据无效时,应用程序端会发生什么?刷新收据(这将要求用户提供凭据)并再次将其传递给服务器以进行新的重新验证?
我会告诉用户您不相信收据是有效的,并提供重试选项。致电SKReceiptRefreshRequest
,再次将收据发送到您的服务器。如果随后失败,请再次显示该选项。
如果用户进行了欺诈性购买,我怀疑他们会向您或 Apple 投诉。
【讨论】:
以上是关于iOS 自动更新订阅:收据验证流程的主要内容,如果未能解决你的问题,请参考以下文章