2009-11-09 59 views
0

正如Apple建议的那样,我已在应用程序中放置了一个按钮,用于在应用内购买应用程序中恢复旧成功交易。IPHONE:Storekit - 中止交易恢复(应用程序内购买)

问题是这样的。用户点击按钮,应用程序开始恢复交易。如果在此过程中由于某种原因导致应用程序关闭,则该过程将在下一次应用程序运行时继续。

在我的情况下,恢复所有事务可能需要一些时间,特别是如果用户有很多事务。所以,当应用程序再次启动时,我看到一个黑屏,应用程序不会加载,直到最后一个事务恢复。

显然,恢复事务的过程会挂起直到完成才加载的应用程序。

由于苹果建议,我有这个,我的应用程序的开始......

CustomStoreObserver *observer = [[CustomStoreObserver alloc] init]; 
[[SKPaymentQueue defaultQueue] addTransactionObserver:observer]; 

这是恢复有用中断的销售,但在我的情况下导致当问题是恢复旧事务痛已经购买。

我希望能够中止任何可以运行的旧事务的恢复,当程序启动时,只需在脚趾应用程序运行时允许它们运行。

任何方式来做到这一点?

回答

1

您是否可以不在另一个线程/运行循环中创建存储观察器,以便它不会阻塞UI线程?

如果不成功,只有在启动屏幕可见后才添加事务观察器?

+0

谢谢......是的,我曾考虑过这个问题。这将解决只是挂起部分,但事务将继续使用CPU和放慢应用程序... – SpaceDog

+0

对不起,我不能帮助。我猜测SK不期望应用程序有很多交易。 缓解这一点,如果交易未能完成(希望很少),并且应用程序退出,用户应该只需启动此过程。至少如果这是用户发起的操作并且您的应用程序到达启动屏幕,则客户端应该更加接受延迟。 – Simon

+0

可能是一个无益的评论,但也许你应该考虑每次交易收取更多的费用,以便交易量更低,可能会提供一小撮项目,比单独购买鼓励人们购买更多并减少交易的成本要低。 – Simon