尚未购买的 IAP 正在恢复中
IAPs are being restoring when they have not yet been purchased yet
当用户调用 restorePurchases() 时,非消耗品 com.premium 会恢复,即使他们并不拥有它。
以下是负责恢复购买和购买 IAP 的功能。这只是非消耗性 IAP 的问题。
购买没有问题。如果用户试图购买他们已经拥有的 IAP,它会被简单地恢复。感谢您关注此问题。
func restorePurchases() {
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().restoreCompletedTransactions()
}
func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
print("transactions restored")
for transaction in queue.transactions {
let t: SKPaymentTransaction = transaction
let prodID = t.payment.productIdentifier as String
print("starting restoring")
switch prodID {
case "com.premium":
print("restoring ads")
removeAds()
case "com.cash":
print("we dont restore coins")
case "com.level":
print("we dont restore levels")
default:
print("can't restore")
}
}
这也是我的付款队列。
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
print("add paymnet")
for transaction:AnyObject in transactions {
let trans = transaction as! SKPaymentTransaction
print(trans.error)
switch trans.transactionState {
case .purchased:
print("buying, ok unlock iap here")
print(p.productIdentifier)
let prodID = p.productIdentifier as String
switch prodID {
case "com.premium":
print("buying ads")
removeAds()
case "com.cash":
print("buying coins")
addCoins()
case "com.level":
print("buying levels")
addLevels()
default:
print("can't buy")
}
queue.finishTransaction(trans)
break;
case .failed:
print("buy error")
queue.finishTransaction(trans)
break;
default:
print("default")
break;
}
}
}
您不应更新 paymentQueueRestoreCompletedTransactionsFinished
中的任何购买状态。此功能只是让您知道恢复过程已完成。您可以使用它来更新您的 UI 或显示警报或其他内容。
恢复过程将要恢复的事务传送到 updatedTransactions
函数,您在其中处理 .restored
状态的方式与处理 .purchased
状态的方式相同。
本质上"restore"只是重播非消耗品和自动续订订阅购买类型的购买交易过程。
当用户调用 restorePurchases() 时,非消耗品 com.premium 会恢复,即使他们并不拥有它。 以下是负责恢复购买和购买 IAP 的功能。这只是非消耗性 IAP 的问题。 购买没有问题。如果用户试图购买他们已经拥有的 IAP,它会被简单地恢复。感谢您关注此问题。
func restorePurchases() {
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().restoreCompletedTransactions()
}
func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
print("transactions restored")
for transaction in queue.transactions {
let t: SKPaymentTransaction = transaction
let prodID = t.payment.productIdentifier as String
print("starting restoring")
switch prodID {
case "com.premium":
print("restoring ads")
removeAds()
case "com.cash":
print("we dont restore coins")
case "com.level":
print("we dont restore levels")
default:
print("can't restore")
}
}
这也是我的付款队列。
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
print("add paymnet")
for transaction:AnyObject in transactions {
let trans = transaction as! SKPaymentTransaction
print(trans.error)
switch trans.transactionState {
case .purchased:
print("buying, ok unlock iap here")
print(p.productIdentifier)
let prodID = p.productIdentifier as String
switch prodID {
case "com.premium":
print("buying ads")
removeAds()
case "com.cash":
print("buying coins")
addCoins()
case "com.level":
print("buying levels")
addLevels()
default:
print("can't buy")
}
queue.finishTransaction(trans)
break;
case .failed:
print("buy error")
queue.finishTransaction(trans)
break;
default:
print("default")
break;
}
}
}
您不应更新 paymentQueueRestoreCompletedTransactionsFinished
中的任何购买状态。此功能只是让您知道恢复过程已完成。您可以使用它来更新您的 UI 或显示警报或其他内容。
恢复过程将要恢复的事务传送到 updatedTransactions
函数,您在其中处理 .restored
状态的方式与处理 .purchased
状态的方式相同。
本质上"restore"只是重播非消耗品和自动续订订阅购买类型的购买交易过程。