代码之家  ›  专栏  ›  技术社区  ›  TheoK

恢复未处理的SKPaymentTransaction以用于非续订订阅

  •  0
  • TheoK  · 技术社区  · 7 年前

    SKPaymentTransactionObserver 我实现了以下功能:

    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { }
    

    在这个方法中,我循环了所有 updatedTransactions 我每天都检查 transactionState ,因此我实现了我的逻辑。

    困扰我的是:当交易成功时,我必须联系我们的服务器来更新用户的个人资料,并为他/她的订阅增加更多的天数。这意味着我必须打电话 SKPaymentQueue.default().finishTransaction(transaction) 之后 我收到了来自我们服务器的成功响应。然而,从苹果服务器发送消息到交易完成,直到我们的服务器做出响应,都有可能出现问题。

    一个捷径是在苹果做出回应后立即将交易标记为完成,但通过阅读文档,这似乎并不正确。如何恢复未处理的事务?(如果我们的服务器没有响应 SKPaymentQueue。默认()。finishTransaction(事务) 未调用)。

    提前谢谢你。

    1 回复  |  直到 7 年前
        1
  •  4
  •   rounak    7 年前

    只有在服务器确认后,才应将事务标记为已完成。

    如果在事务成功但您的服务器没有看到它的这段时间内确实出现了问题(比如发生了崩溃),那么事务将保持不完整,并且可以在中访问 SKPaymentQueue.default.transactions 在您将观察者添加到队列之后。

    然后,您可以抓取这些交易或收据,并将其发送到您的服务器,再次尝试延长其订阅的持续时间。

    此外, from Apple's docs :

    例如,考虑一个用户在你的应用程序中购买东西的情况 就在进入隧道之前。你的应用程序无法提供 购买内容,因为没有网络连接。下一次 并在当时交付购买的内容。同样,如果 每次启动应用程序时观察,直到交易完成 正确完成。