我试图找出最好的方法,以确保用户不会失去他们的消费品在应用程序购买。
然而,我开始觉得自己像this StackOverflow user。
完成事务后,我想发送给用户在应用程序中购买消耗品的服务器。但是,连接可能在这一点上失败(服务器关闭或用户失去连接)。
在这种情况下,我正在考虑在重新建立连接时尽快发送收据。然而,从什么I have read the receipt contains all in app purchases和我不能只发送收据上一次购买的项目。
如何确保用户的购买与服务器同步?
发布于 2015-03-11 16:42:19
解决办法是不打电话
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
在购买消耗品时,直到与服务器同步为止。这样,每次设置为观察支付队列时,事务将再次传递给您的观察者。您需要管理应用程序端,无论是已经交付但没有同步的采购,还是新的购买。
一旦您与服务器同步了事务。你可以打电话给-finishTransaction:。请参见文档中的“完成事务”:
ref/doc/uid/TP40008267-CH5-SW3
编辑
因此,用户由苹果负责,苹果向您发送一个表示事务的SKPaymentTransaction对象。如果该交易的transactionState属性是SKPaymentTransactionStatePurchased,那么这意味着苹果已经处理了付款,并且用户已经被收取了费用。
一旦从SKPaymentTransaction接收到这个paymentQueue对象,就可以将内容传递给用户,并将事务与服务器同步。一旦成功地完成了这两项任务,您将调用-finishTransaction。调用-finishTransaction告诉StoreKit您已经成功地完成了您需要做的一切。-finishTransaction是一个同步调用,您将责任交还给StoreKit,您不需要关心如何将其传递回iTunes/Apple,StoreKit会为您处理这一切。
在完成所有需要做的事情之前,不应该调用-finishTransaction。如果出了问题(设备电池失效、互联网连接丢失、应用程序崩溃),下次当您的观察者在队列中注册时,您将从支付队列中获得相同的SKPaymentTransaction,并可以尝试再次与服务器同步。这种情况会一直发生,直到你打电话给-finishTransaction。
有一种情况是,用户永远无法与您的服务器同步,再也无法连接到internet等。这是您无法控制的,在这一点上,苹果有责任决定是否向用户收费。
值得注意的是,如果用户愿意的话,用户可以与苹果联系并要求退款。
https://stackoverflow.com/questions/24870291
复制相似问题