You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xcode中StoreKit交易显示已购买但状态未完成的问题求助

解决StoreKit交易显示已购买但状态未完成的问题

针对你遇到的交易状态显示purchased但标记为unfinished的问题,结合你的代码,可从以下几个方向排查:

  • 确认交易观察者已正确注册
    必须在App启动阶段(比如application(_:didFinishLaunchingWithOptions:)或scene(_:willConnectTo:options:))将你的观察者对象添加到支付队列:

    SKPaymentQueue.default().add(self)
    

    如果没有注册观察者,updatedTransactions可能无法被正确触发,或者finishTransaction的操作无法同步到调试界面。

  • 确保finishTransaction在主线程执行
    SKPaymentQueue的相关操作要求在主线程执行,虽然回调默认在主线程,但如果业务逻辑存在线程切换,可能导致操作失效。修改purchased方法,强制在主线程调用finish:

    internal func purchased(transaction:SKPaymentTransaction) {
        DispatchQueue.main.async {
            SKPaymentQueue.default().finishTransaction(transaction)
        }
        print("Purchased")
        guard let product = product else { return }
        purchaseTransactionComplete() // this updates UserDefaults
    }
    
  • 清理StoreKit测试缓存
    Xcode的StoreKit调试界面可能存在状态缓存,尝试以下操作:

    • 关闭Xcode和模拟器/测试设备
    • 打开Xcode的Debug > StoreKit > Reset Storekit重置测试数据
    • 重新运行项目测试
  • 检查是否存在多个交易观察者
    如果项目中有多个对象注册了SKPaymentQueue观察者,需确保所有观察者都正确处理了交易状态并调用finishTransaction,否则未处理的观察者会导致交易一直处于未完成状态。

  • 更换测试账号重试
    部分测试账号可能存在交易状态异常,尝试使用新的测试账号进行购买测试。

内容的提问来源于stack exchange,提问作者Lena Verhoev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 14:27:10