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破解.
解决方法
如果互联网爆发了,你将不会去完成交易.
但是这很酷,因为您可以重试(NSTimer),并且您的应用程序将在启动时被给予未完成的事务.
这就是StoreKit设计的工作原理(即使阅读文档并不明显).
StoreKit带有交易,是一个很好的理由.用户可以在购买后立即退出应用程序,您仍然需要从中恢复.
这就是为什么苹果公司建议您在应用程序生命周期内尽快设置交易观察者.
在提供内容之前不要完成交易,您必须在StoreKit之上实现自己的交易系统,而不想这样做,相信我(已经看完了,这是一个灾害).
编辑:诚实地说,用户在购买之后以及在您验证之前关闭互联网的最终是可笑的.那家伙在前一天在互联网上,没有人会在购买中间出门去切断互联网.但这可能是用户中断的那一刻,并将您的应用程序发送到背景.然后,由于iOS认为合适的原因,您的应用程序可能会被杀死.当您的应用程序再次启动时,您的应用程序不会记得开始购买,并且由于您已经完成了交易,存储套件将不会有什么大帮助.