Storekit在[Environment: Xcode]环境下订阅成功却无法获取原始交易ID求助
解决Xcode中StoreKit订阅成功后无法获取原始交易ID的问题
先明确原始交易ID的正确获取路径:自动续订订阅的原始交易ID(original transaction ID) 存储在交易对象的
originalTransaction属性中,而非当前交易的transactionIdentifier。检查你的交易处理逻辑:
在SKPaymentQueue的交易回调方法里,针对不同交易状态正确提取原始ID:func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transaction in transactions { switch transaction.transactionState { case .purchased, .restored: // 获取原始交易ID,首次订阅时originalTransaction即为当前交易 let originalTxID = transaction.originalTransaction?.transactionIdentifier ?? transaction.transactionIdentifier print("原始交易ID:\(originalTxID ?? "未获取到")") // 务必完成交易收尾 queue.finishTransaction(transaction) case .failed, .deferred, .purchasing: // 处理其他状态逻辑 break @unknown default: break } } }不要遗漏恢复订阅的逻辑:
如果用户通过恢复操作获取订阅,必须主动调用SKPaymentQueue.default().restoreCompletedTransactions(),恢复后的交易同样会进入上述回调,此时originalTransaction会指向首次订阅的交易记录。若使用StoreKit 2,API有所不同:
StoreKit 2中使用Transaction类型,直接访问originalID属性即可:Task { for await result in Transaction.currentEntitlements { guard case .verified(let transaction) = result else { continue } if let originalID = transaction.originalID { print("原始交易ID:\(originalID)") } } }测试环境注意事项:
Sandbox测试环境下的原始交易ID是有效的,不要将测试ID与生产环境混淆,上线前切换到正式环境验证即可。
内容的提问来源于stack exchange,提问作者puja
相关产品推荐
相关产品推荐

