ios – 将消费的应用内购买与服务器同步

前端之家收集整理的这篇文章主要介绍了ios – 将消费的应用内购买与服务器同步前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图找出最好的方式来确保用户在应用程序购买时不会失去其消耗品.

但是,我开始觉得像this StackOverflow user.

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

在这种情况下,我正在考虑在可以再次进行连接后立即发送收据.但是,从I have read the receipt contains all in app purchases和我不能只发送最后一个购买的物品的收据.

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

解决方法

解决方案是不要打电话

[[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

编辑

所以用户由苹果收费,而苹果向您发送一个代表该事务的SKPaymentTransaction对象.如果该事务的transactionState属性是SKPaymentTransactionStatePurchased,那么这意味着苹果已经处理了付款,用户已经收费.

从paymentQueue收到此SKPaymentTransaction对象后,您将内容传递给用户,并将事务与服务器同步.一旦这两个成功完成,您将调用-finishTransaction.调用-finishTransaction告诉StoreKit你已经成功完成了你需要做的一切. -finishTransaction是一个同步调用,您将责任转交给StoreKit,您不必担心自己如何传回iTunes / Apple,StoreKit可以为您处理所有这些.

在你完成你需要做的一切之前,你不应该调用-finishTransaction.如果出现问题(设备电池死机,互联网连接丢失,应用程序崩溃),您的观察员在队列中注册后,您将从付款队列中提供相同的SKPaymentTransaction,并可以尝试再次与您的服务器同步.这将持续发生,直到你调用-finishTransaction.

有一种情况,用户永远无法与您的服务器同步,从不再次连接到互联网.这是无法控制的,在这一点上,苹果有责任决定是否向用户收费.

同样值得注意的是,用户可以联系苹果并要求退款.

原文链接:https://www.f2er.com/iOS/335848.html

猜你在找的iOS相关文章