繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM