[英]Restoring unprocessed SKPaymentTransaction for non-renewing subscription
在我的应用程序中,我想实现非续订订阅。 我已经建立(我相信正确)我的逻辑。 我将观察者放在应用程序委托中,然后在实现SKPaymentTransactionObserver
的类中实现以下功能:
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { }
在此方法中,我遍历所有updatedTransactions
并检查每个transactionState
,并相应地实现了我的逻辑。
令我困扰的是:交易成功后,我必须联系我们的服务器以更新用户的个人资料,并增加其订阅的天数。 这意味着我收到服务器的成功响应后 ,必须调用SKPaymentQueue.default().finishTransaction(transaction)
。 但是,从Apple的服务器发送交易已完成的那一刻开始,直到我们的服务器做出响应,都有可能出问题。
一种快捷方式是在Apple做出回应后立即将交易标记为已完成,但是通过阅读文档,这似乎并不正确。 如何还原未处理的交易? (在我们的服务器没有响应并且未调用SKPaymentQueue.default().finishTransaction(transaction)
情况下)。
先感谢您。
只有在服务器确认交易后,您才应将交易标记为已完成。
如果在事务成功之间有什么地方出了问题(例如发生崩溃),但是您的服务器没有看到它,则事务将保持不完整,并且可以在将观察者添加到之后的SKPaymentQueue.default.transactions
进行访问。队列。
然后,您可以获取这些交易或收据,并将其发送到您的服务器,以进行另一次尝试以增加其订阅时间。
此外, 根据Apple的文档 :
例如,考虑用户在进入隧道之前立即在您的应用中购买商品的情况。 您的应用无法传递购买的内容,因为没有网络连接。 下次启动应用程序时,StoreKit会再次调用您的事务队列观察器,并在那时交付购买的内容。 同样,如果您的应用程序无法将事务标记为已完成,则StoreKit会在每次启动应用程序时调用观察程序,直到事务正确完成为止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.