ios – 如何在使用自动可再生应用内购买时恢复正确的交易?

前端之家收集整理的这篇文章主要介绍了ios – 如何在使用自动可再生应用内购买时恢复正确的交易?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这个问题是关于自动再生IAP的问题,以及如何恢复.
这些链接thisthis没有帮助我不幸.

在我的应用程序中,我有用户订阅自动可再生应用内购买.
他们可以订阅1,6或12个月.

当他们订阅时,交易收据将发送到我的服务器以备以后验证.
我不会立即验证收据,因为它会减慢用户体验(对苹果服务器的收据验证查询大约需要1 – 2秒).相反,我使用天真的方法,并提供用户订阅内容,无需任何直接的接收验证.我安排一个cron工作,每天验证每个用户的收据,并在过期的收据上撤销特权.

现在,由于苹果指南清楚地表明,对于具有自动可再生订阅的应用程序,还需要恢复功能,所以我选择实施.

当我尝试在沙箱模式下恢复购买时,使用:

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

我不仅获得当前的订阅,而且所有以前的订阅(包括过时的订阅)在回调到:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions

目前我已经尝试了我的IAP约30次,这意味着上述方法发送了30个不同的事务(过时和活跃).对于这些交易中的每一个,我将交易收据上传到我的网络服务,以备后续验证.

现在.如果最后一笔交易有过期的收据(但第二个到最后一个事务实际上是有效的),它将覆盖当前用户的当前(有效)收据,从而虚假地撤销该用户的权限.

基本上我的问题是当调用restoreCompletedTransactions时,我获取了过时和活动事务的列表.而在服务器端,他们可能会使对方无效.最好,我只想检索一个事务(最相关),并将该收据发送到我的服务器进行后续验证.

总而言之,我猜我的主要问题是:

如何确保仅恢复活动(即最新)事务?

解决方法

我的解决方案:检索收据并根据您的productIdentifiers验证.使用SKPaymentQueue.defaultQueue().restoreCompletedTransactions()进行自动更新订阅并不合适,因为:

>花费太长时间,因为它导致收据验证被称为太多次(一次是过去的每个交易)
>可能导致有效的事务验证被后续的失败事务覆盖

例如,如果您有三个持续时间用于自动续订订阅,则只需对与三个订阅持续时间相关联的三个productIdentifier验证收据.

猜你在找的iOS相关文章