【问题标题】:Forcing SKPaymentQueue to run on a background thread强制 SKPaymentQueue 在后台线程上运行
【发布时间】:2026-02-09 22:25:05
【问题描述】:

在我的 AppDelegate 中,我运行以下命令:

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

当我运行“购买恢复”并立即终止应用程序时,在重新启动后,用户界面在处理所有购买所需的时间段内卡住了(我测试了其中的许多,每次我验证苹果收据 - 卡住 UI 大约需要一分钟!!)

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

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

这并没有帮助....

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

我调试了 - 并且......付款处理正在“队列:com.apple.main-thread(串行)”上运行。我假设这也是用户 GUI 线程(否则 GUI 没有理由卡住......)。

所以...

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

谢谢!

【问题讨论】:

    标签: swift in-app-purchase skpaymenttransaction


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 您的错误报告编号是多少,以便其他人可以将我们的声音添加到此请求中?最好让他们看到许多将此视为问题的开发人员。