的解决方案是,直到它已与服务器同步的耗材购买不调用
[[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
,那么这意味着Apple已经处理了付款并且该用户已被收费。
从paymentQueue收到此SKPaymentTransaction
对象后,即会将内容交付给用户,并将交易与服务器同步。一旦这两项都成功完成,请致电-finishTransaction
。拨打-finishTransaction
会告诉StoreKit
您已成功完成您需要执行的所有操作。 -finishTransaction
是一个同步调用,您将责任交还给StoreKit
,并且您不需要关心自己如何传回iTunes/Apple,StoreKit
可以为您处理这一切。
在完成所有需要做的事情之前,您不应该致电-finishTransaction
。如果出现问题(设备电池耗尽,互联网连接中断,应用程序崩溃),则在您的观察员在队列中注册时,您将从支付队列中交付相同的SKPaymentTransaction
,并且可以尝试再次与服务器同步。在您致电-finishTransaction
之前,这种情况会持续发生。
有一种情况是,用户永远无法与服务器同步,永远不会再连接到互联网等。这超出了您的控制范围,并且此时由Apple决定是否对其充电用户。
同样值得注意的是,用户可以联系Apple,并在需要时申请退款。
如果我不叫结束事务的用户失去了他的钱或之后我把完成交易只输?另外,如何处理服务器同步的情况,我将完成交易,但不知何故iTunes连接不会收到完成交易操作? –
请看我的更新 –
我完全卖了。非常感谢你给出了很好的答案。唯一没有完全覆盖的是你如何知道你的SKPaymentTransaction对应于你的某个模型(与服务器同步)。但是那个答案已经够好了:) –