恢复未处理的SKPaymentTransaction以进行非续订订阅

时间:2017-11-09 08:27:35

标签: ios swift storekit

在我的应用中,我想实现非续订订阅。我已经建立了(我相信正确)我的逻辑。我将观察者放在app委托中,然后在实现SKPaymentTransactionObserver的类中实现以下函数:

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

在这个方法中,我遍历所有updatedTransactions并检查每个transactionState,因此我实现了我的逻辑。

让我感到困扰的是:当交易成功时,我必须联系我们的服务器以更新用户的个人资料并为他/她的订阅添加更多天。这意味着我必须在之后致电SKPaymentQueue.default().finishTransaction(transaction) 我收到了来自我们服务器的成功回复。但是,从Apple服务器发送交易完成的那一刻起,有可能出现问题,直到我们的服务器响应。

快捷方式是在Apple响应时将交易标记为已完成,但通过阅读文档,它似乎不正确。如何恢复未处理的交易? (如果我们的服务器没有响应,并且没有调用SKPaymentQueue.default().finishTransaction(transaction))。

提前谢谢。

1 个答案:

答案 0 :(得分:3)

只有在服务器确认后才能将交易标记为已完成。

如果在交易成功但服务器没有看到它之间出现问题(让我们说发生崩溃),交易将保持不完整,并且可以在{{1在将观察者添加到队列之后。

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

此外,from Apple's docs

  

例如,考虑用户在您的应用中购买商品的情况   就在进入隧道之前。您的应用无法提供   购买内容,因为没有网络连接。下一次   您的应用程序启动后,StoreKit会调用您的事务队列观察器   再次,并在那时提供购买的内容。同样,如果   你的应用程序无法将交易标记为已完成,StoreKit会调用   每次启动应用程序时观察者,直到交易完成   正确完成。