【问题标题】:Syncing a consumable in-app purchase with a server将消耗品应用内购买与服务器同步
【发布时间】:2014-07-21 16:42:01
【问题描述】:

我正在尝试找出确保用户在购买应用时不会丢失其消耗品的最佳方法。

但是,我开始觉得this StackOverflow user

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

在那种情况下,我正在考虑在可以再次建立连接后立即发送收据。但是,I have read the receipt contains all in app purchases 和我不能只发送最后购买商品的收据。

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

【问题讨论】:

    标签: ios in-app-purchase


    【解决方案1】:

    解决办法是不调用

    [[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 处理它全都是你的。

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

    在某些情况下,用户永远无法与您的服务器同步,永远无法再次连接到互联网等。这是您无法控制的,此时 Apple 有责任决定是否向用户收费.

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

    【讨论】:

    • 如果我不调用完成交易,用户会损失他的钱,还是只有在我调用完成交易后才输?另外,我该如何处理服务器同步的情况,我要完成事务,但不知何故itunes connect没有收到完成事务操作?
    • 我完全被卖掉了。非常感谢您的出色回答。唯一没有完全涵盖的是您如何知道您的 SKPaymentTransaction 对应于您拥有的某个模型(与服务器同步)。但是这个答案已经足够好了:)
    猜你喜欢
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多