我正在尝试在恢复购买时向用户显示提醒。但是当我调试并打印出恢复购买的数量时,我得到 0 个交易被恢复。我不明白为什么它会带回 0。我以为我只需要调用 restoreCompletedTransactions()
方法。如果恢复已完成,我会发布通知通知我,但我什至没有达到这一点。我在用着
paymentQueueRestoreCompletedTransactionsFinished(_ pQueue: SKPaymentQueue)
在恢复完成时通知我。我怎样才能正确恢复购买。
let paymentQueue = SKPaymentQueue.default()
func restorePurchases() {
if !self.canMakePurchases {
return
}
self.paymentQueue.add(self)
self.paymentQueue.restoreCompletedTransactions()
}
func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) {
print("Restore failed")
}
func paymentQueue(_ pQueue: SKPaymentQueue, updatedTransactions pTransactions: [SKPaymentTransaction]) {
for scanTransaction in pTransactions {
switch scanTransaction.transactionState {
case .purchasing:
break
case .purchased:
NotificationCenter.default.post(name: .AppDelegateUserHasPurchasedProductNotification, object: self)
pQueue.finishTransaction(scanTransaction)
default:
pQueue.finishTransaction(scanTransaction)
}
}
}
func paymentQueueRestoreCompletedTransactionsFinished(_ pQueue: SKPaymentQueue) {
print("Received restored transactions: \(pQueue.transactions.count)")
for scanTansaction in pQueue.transactions {
switch scanTansaction.transactionState {
case .restored:
NotificationCenter.default.post(name: .AppDelegateUserHasRestoredPurchasesNotification, object: self)
pQueue.finishTransaction(scanTansaction)
default:
break
}
}
}
日志
Received restored transactions: 0
最佳答案
你的实现
func paymentQueue(_ pQueue: SKPaymentQueue, updatedTransactions pTransactions: [SKPaymentTransaction]) {
错了。您遗漏了恢复购买时的交易状态!您有 case .purchased
但您忘记了 case .restored
。把它放进去。这是你收到通知并可以回应的地方。
关于ios - 如何在 Swift 中使用 IAP 正确恢复购买,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55610155/