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
相关产品推荐
相关产品推荐

