如果我的服务器失败并且无法提供内容,如何取消应用程序内购买? (IOS)

我正在iOS上的应用程序购买中实现,我的服务器将在用户购买项目时提供对某些内容的访问。 我已经完成了所有工作,包括让服务器在提供对内容的访问权限之前validation购买的收据。

但是,如果由于某种原因,应用程序无法向我的服务器注册交易(例如,由于服务器中断),我想取消该交易,以便iTunes不向用户收费。 这可能吗?

为了进一步详细说明,应用程序在用户点击“购买”后,从paymentQueue:updatedTransactionsfunction中联系我的服务器。 目前,我打电话给:

 [_myQueue finishTransaction:transaction]; 

联系我的服务器后。 但是,如果联系服务器时出错,是否有一个函数我可以调用取消事务而不是完成它?

我从这里看到有些人只是不调用finishTransaction ,以便下次用户启动应用程序并添加事务观察器时事务恢复(因此应用程序可以尝试再次联系服务器)但是,这是不太理想,因为用户在重新启动应用程序并且服务器再次可用之前将无法访问内容,但用户已经付费了。

谢谢!

我认为实现这一目标的唯一优雅方法是让您的服务器实施可用性检查,并在实际购买之前将其称为最后一件事。 一旦用户通过呈现给他的UIAlertView确认购买,就会进行购买,并且您必须尽一切努力使他获得他的钱。

由于没有手动取消事务的方法,这就是我处理它的方式:我没有标记交易完成,然后我可以选择稍后手动调用paymentQueue:updatedTransactions:像这样:

 if (SKPaymentQueue.defaultQueue.transactions.count > 0) { //show a loading box to user //... //now manually call the observer method [self paymentQueue:SKPaymentQueue.defaultQueue updatedTransactions:SKPaymentQueue.defaultQueue.transactions]; } 

如果我的服务器调用失败,那么我提供一个UIAlertView,其中包含重试或取消选项。 重试调用上面的代码。

这样您就不必等到应用程序重新启动,但如果确实如此,那也没关系。