在后台线程上强制 SKPaymentQueue 运行

Forcing SKPaymentQueue to run on a background thread

在我的 AppDelegate 中,我 运行 这个命令:

SKPaymentQueue.defaultQueue().addTransactionObserver(self.storeDel);

当我 运行 "purchase recovery" 并立即终止应用程序时,在重新启动它后,用户界面在处理所有购买所需的时间段内卡住(我测试了很多他们,对于每一个我都用苹果验证收据 - 卡住大约需要一分钟 UI!!)

我认为可能是事务队列启动阻塞了..所以我将代码更改为:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {
            SKPaymentQueue.defaultQueue().addTransactionObserver(self.storeDel);
});

并没有帮助....

现在 - 我开始怀疑我的主线程上的队列 运行s...这对我来说没有意义...

我调试了 - 并且...支付处理在 "Queue: com.apple.main-thread (serial)" 上进行 运行ning。我假设这也是用户 GUI 线程(否则没有理由让 GUI 卡住...)。

所以...

我能做什么?? 有什么解决方案可以让我处理收据并做出响应...?

谢谢!

我联系了 Apple,试图打开一个关于这个问题的错误报告。

他们说,一般来说,这是预期的行为(是的!我的 GUI 应该在处理付款时被卡住)。

如果这也让您感到困扰,http://bugreport.apple.com 是针对此问题打开服务请求的网站。

我认为这是一个有缺陷的设计,它是一个错误,Apple 认为它是可以接受的。