在服务器端收据验证失败时,我应该调用finishTransaction吗?

mas*_*ash 15 storekit ios

我使用服务器端收据验证.

客户的时候

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

被调用,并且transactionStateSKPaymentTransactionStatePurchased,客户端将收据发送到我们的服务器,我们的服务器验证它.

当服务器端收据验证成功时,客户端明显调用finishTransaction,没问题.

当服务器端收据验证失败时,由于apple临时返回非json,或者客户端发送了无效收据,或者其他什么,服务器将该信息返回给客户端.

接下来,我们的客户应该怎么做?我们打电话finishTransaction吗?

这导致无效的交易永远存在于队列中?喜欢在这个问题中说:iPhone应用程序内购买:收据验证

但如果您发现收据无效,则应完成关联交易.如果没有,您可能会在事务队列中永久存在额外的事务.这意味着每次你的应用运行时,每个事务都会调用一次paymentQueue:updatedTransaction:

但是,如果我们这样做finishTransaction,我们的宝贵用户将收到此收据(我们未能验证),对吧?

或者验证失败的交易在某个时期到期了吗?

这是在Apple的文档中的某处记录的吗?我在http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/Introduction/Introduction.html中找不到任何内容.

小智 2

是的,你必须完成交易。

如果你给用户他们想要的东西,那就取决于你了。在某些情况下,最好给用户他们想要的东西,即使收据无效或伪造(使用越狱)。尤其是当你不花任何钱的时候。

  • 我经常看到这样的评论:如果收据失败,无论如何只提供内容。如果您打算这样做,为什么要费尽心思验证收据呢?只是好奇你对此的看法。 (8认同)