ios – 服务器端接收验证失败时是否应该调用finishTransaction?

我使用服务器端验证.

当客户的

– (void)paymentQueue:(SKPaymentQueue *)队列
updatedTransactions:(NSArray *)事务

调用,transactionState是SKPaymentTransactionStatePurchased,
客户端将收据发送到我们的服务器,
我们的服务器验证它.

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

当服务器端验证失败时,
因为苹果临时返回非json,或客户端发送无效收据,或某事,
服务器将该信息返回给客户端.

接下来,我们的客户应该怎么做?
我们应该调用finishTransaction吗?

这导致无效的交易永远活在队列中?
就像在这个问题上说的那样:iPhone in-app purchase: receipt verification

But if you find out that a receipt is invalid,you should finish the associated transaction. If not,you may have extra-transactions living forever in the transaction queue. That means that each time your app runs,paymentQueue:updatedTransaction: will be called once per transaction…

但是,如果我们完成交易,我们的宝贵的用户将收到此收据(我们未能验证),是吗?

或者验证失败的交易在一段时间内到期?

这是否记录在苹果文档中的某个地方?
我在http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/Introduction/Introduction.html没找到任何东西

解决方法

是的,你必须完成交易.

如果你给用户那么他们想要的话,这取决于你.在某些情况下,即使收据无效或伪造(使用越狱),最好给用户所需的.特别是当它花费你什么也没有.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...