在我的应用中,我想实现非续订订阅。我已经建立了(我相信正确)我的逻辑。我将观察者放在app委托中,然后在实现SKPaymentTransactionObserver
的类中实现以下函数:
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { }
在这个方法中,我遍历所有updatedTransactions
并检查每个transactionState
,因此我实现了我的逻辑。
让我感到困扰的是:当交易成功时,我必须联系我们的服务器以更新用户的个人资料并为他/她的订阅添加更多天。这意味着我必须在之后致电SKPaymentQueue.default().finishTransaction(transaction)
我收到了来自我们服务器的成功回复。但是,从Apple服务器发送交易完成的那一刻起,有可能出现问题,直到我们的服务器响应。
快捷方式是在Apple响应时将交易标记为已完成,但通过阅读文档,它似乎不正确。如何恢复未处理的交易? (如果我们的服务器没有响应,并且没有调用SKPaymentQueue.default().finishTransaction(transaction)
)。
提前谢谢。
答案 0 :(得分:3)
只有在服务器确认后才能将交易标记为已完成。
如果在交易成功但服务器没有看到它之间出现问题(让我们说发生崩溃),交易将保持不完整,并且可以在{{1在将观察者添加到队列之后。
然后,您可以获取这些交易或收据并将其发送到您的服务器,以便再次尝试增加订阅的持续时间。
例如,考虑用户在您的应用中购买商品的情况 就在进入隧道之前。您的应用无法提供 购买内容,因为没有网络连接。下一次 您的应用程序启动后,StoreKit会调用您的事务队列观察器 再次,并在那时提供购买的内容。同样,如果 你的应用程序无法将交易标记为已完成,StoreKit会调用 每次启动应用程序时观察者,直到交易完成 正确完成。