微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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验证收据.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐