ios – 我应该何时验证应用内购买交易收据?

我的意思是,我的步骤应该如何?

1) Get SKPaymentTransactionStatePurchased

2) Remove it from SKPaymentQueue and provide the content by [[SKPaymentQueue defaultQueue] finishTransaction: transaction];

3) Validate the receipt and then,if it’s invalid,block the content i’ve just provided

或者我应该将第二步改为第三步吗?

1) Get SKPaymentTransactionStatePurchased

2) Validate the receipt and then,dont’t provide content

3) Remove it from SKPaymentQueue anyway [[SKPaymentQueue defaultQueue] finishTransaction: transaction];

在第一种情况下,用户可以在购买后关闭互联网,所以我无法验证收据.但是在第二步中,在步骤1和步骤2之间可能会出现互联网的一些问题,所以我不会完成交易,也不会提供内容,这将是一个糟糕的用户体验.

那么你为什么选择你的应用程序,为什么?

我的选择

我选择了第二种情况,因为选择第一种方案使我的应用程序容易被iAP Cracker破解.

解决方法

情景2.
如果互联网爆发了,你将不会去完成交易.
但是这很酷,因为您可以重试(NSTimer),并且您的应用程序将在启动时被给予未完成的事务.
这就是StoreKit设计的工作原理(即使阅读文档并不明显).

StoreKit带有交易,是一个很好的理由.用户可以在购买后立即退出应用程序,您仍然需要从中恢复.
这就是为什么苹果公司建议您在应用程序生命周期内尽快设置交易观察者.

在提供内容之前不要完成交易,您必须在StoreKit之上实现自己的交易系统,而不想这样做,相信我(已经看完了,这是一个灾害).

编辑:诚实地说,用户在购买之后以及在您验证之前关闭互联网的最终是可笑的.那家伙在前一天在互联网上,没有人会在购买中间出门去切断互联网.但这可能是用户中断的那一刻,并将您的应用程序发送到背景.然后,由于iOS认为合适的原因,您的应用程序可能会被杀死.当您的应用程序再次启动时,您的应用程序不会记得开始购买,并且由于您已经完成了交易,存储套件将不会有什么大帮助.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...