首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >恢复未处理的SKPaymentTransaction以便不续订订阅

恢复未处理的SKPaymentTransaction以便不续订订阅
EN

Stack Overflow用户
提问于 2017-11-09 08:27:34
回答 1查看 240关注 0票数 0

在我的应用程序中,我想实现不续订订阅。我建立了我的逻辑(我相信是正确的)。我将观察者放在应用程序委托中,然后在实现SKPaymentTransactionObserver的类中实现以下功能:

代码语言:javascript
复制
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { }

在这个方法中,我循环遍历所有的updatedTransactions,检查每个transactionState,并相应地实现我的逻辑。

困扰我的是:当事务成功时,我必须与我们的服务器联系,以更新用户的配置文件,并为他/她的订阅增加更多的时间。这意味着我必须在SKPaymentQueue.default().finishTransaction(transaction) 之后调用,因为我从服务器获得了成功的响应。然而,从苹果服务器发送交易完成的那一刻起,就有可能出问题,直到我们的服务器做出反应。

一条捷径是,一旦苹果做出回应,就将交易标记为已完成,但通过阅读文档,这似乎不正确。如何还原未处理的事务?(在这种情况下,我们的服务器没有响应,SKPaymentQueue.default().finishTransaction(transaction)也没有被调用)。

提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-09 08:32:32

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

如果在事务成功但您的服务器还没有看到它之间发生了一些错误(假设发生了崩溃),那么事务将保持不完整,并且在将观察者添加到队列之后就可以在SKPaymentQueue.default.transactions中访问。

然后,您可以获取这些事务或收据,并将其发送到您的服务器,以便再次尝试延长它们的订阅期限。

另外,来自苹果公司的文档

例如,在进入隧道之前,考虑一下用户在应用程序中购买东西的情况。您的应用程序无法交付购买的内容,因为没有网络连接。下一次启动应用程序时,StoreKit再次调用事务队列观察者,并在那个时候交付购买的内容。类似地,如果应用程序未能将事务标记为已完成,则每次启动应用程序时,StoreKit都会调用观察者,直到事务正确完成为止。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47197148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档