将耗材的应用内购买与服务器同步

时间:2014-07-21 16:42:02

标签: ios in-app-purchase

我正在努力找出确保用户在购买应用时不会丢失耗材的最佳方法。

然而,我开始感觉像this StackOverflow user

完成交易后,我想发送给用户在应用程序中购买耗材的服务器。但是,此时连接可能会失败(服务器已关闭或用户失去连接)。

我正考虑在这种情况下,一旦连接再次发送就发送收据。但是,根据I have read the receipt contains all in app purchases,我只能发送最后购买商品的收据。

如何确保用户购买的产品与服务器同步?

1 个答案:

答案 0 :(得分:15)

解决方案是不打电话

[[SKPaymentQueue defaultQueue] finishTransaction:transaction];

关于耗材购买,直到与服务器同步为止。这样,每次设置观察支付队列时,交易将再次发送给您的观察者。您需要管理应用程序端,无论是已交付但未同步的购买,还是新购买。

与服务器同步事务后。你可以致电-finishTransaction:。请参阅此处文档中的“完成交易”:

https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/DeliverProduct.html#//apple_ref/doc/uid/TP40008267-CH5-SW3

修改

因此Apple向用户收费,Apple向您发送代表该交易的SKPaymentTransaction对象。如果该交易的transactionState属性为SKPaymentTransactionStatePurchased,则表示Apple已处理付款并且用户已被收费。

从paymentQueue收到此SKPaymentTransaction对象后,您会将内容传递给用户,并将交易与您的服务器同步。成功完成这两项后,请致电-finishTransaction。致电-finishTransaction告诉StoreKit您已成功完成了所需的一切。 -finishTransaction同步电话,您将责任交还给StoreKit,您无需关心如何将其传达回iTunes / Apple,StoreKit {1}}为您处理所有问题。

在完成您需要做的所有事情之前,不应该致电-finishTransaction。如果出现问题(设备电池耗尽,互联网连接丢失,应用程序崩溃),下次观察者在队列中注册时,您将从支付队列中获得相同的SKPaymentTransaction,并且可以尝试再次与你的服务器。这将继续发生,直到您致电-finishTransaction

有一种情况是用户永远无法与您的服务器同步,再也无法连接到互联网等等。这是您无法控制的,此时Apple决定是否向用户收费

值得注意的是,如果用户愿意,用户可以联系Apple并要求退款。