iOS购买收据服务器验证通常如下所示:
但是,如果第一步成功了呢?例如,在步骤2中,应用程序无法向服务器发送请求,或者在步骤5中,应用程序无法从服务器获得响应,问题是用户已经付费。处理这个问题的最好方法是什么?
发布于 2014-04-24 02:10:03
如果您正在使用SKPaymentQueue,,那么这很容易。您所要做的就是让将事务保存在SKPaymentQueue中,直到“步骤5”,当您从服务器获得成功/失败验证结果时为止。
如果出了什么问题,那么在第1步到第5步之间,仍然可以访问SKPaymentQueue中的事务,并且可以“重新处理”。
不完全事务的再处理可能会在应用程序开始时启动,(或您喜欢的某个时间间隔)。
只需检查SKPaymentQueue以获得未决/不完全事务并将它们发送到服务器(就像'step 2')。如果您的服务器仍然无法访问,显然您将无法进入第5步,因此您不会从队列中删除事务,并且每次在下一个应用程序启动(或下一个队列检查时间间隔)时,这个重新处理都会一次又一次地发生,直到实现为止。
实现
实现也很简单,您需要一个SKPaymentTransactionObserver.的‘事务观察器类’。
在app start中,创建一个‘事务观察者类’的实例,它应该通过调用:
[[SKPaymentQueue defaultQueue] addTransactionObserver:self]然后'transaction观察者类‘获取方法中的事务:
(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions在这个方法中,可以处理和重新处理所有不完整的事务。
请注意,您的服务器必须是幂等(即,如果已处理重复事务,则能够处理这些事务)。
一旦服务器处理并完成了步骤2至4,然后就会出现具有成功/失败结果的app,这是--当您想要通过调用从队列中删除该事务时,是唯一的:
[[SKPaymentQueue defaultQueue] finishTransaction: transaction]最后,给你的用户提供他们在这一点上购买的优质功能。
https://stackoverflow.com/questions/11287352
复制相似问题