Swift IAP restoreCompletedTransactions 甚至恢复未购买的项目
Swift IAP restoreCompletedTransactions restores even non purchased items
我的申请中有4个非消耗品,购买这些作品没有任何问题。
但是,我创建了一个 restorePurchases 按钮,它可以恢复所有产品,无论用户是否购买了它们。我已经在 4 个不同的沙盒测试用户上进行了测试,结果是一致的(即对于一个从未购买过非消耗品的测试用户,点击 'restore' 恢复所有产品)
我的恢复代码如下:
@IBAction func restorePurchases(sender: UIButton) {
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
}
func paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue) {
print("transactions restored")
for transaction in queue.transactions {
let t: SKPaymentTransaction = transaction
let prodID = t.payment.productIdentifier as String
switch prodID {
case "productAbc1":
defaults.setBool(true , forKey: "productAbc1")
case "productAbc2":
defaults.setBool(true , forKey: "productAbc2")
case "productAbc3":
defaults.setBool(true , forKey: "productAbc3")
case "productAbc3":
defaults.setBool(true , forKey: "productAbc4")
default:
print("IAP not setup; enable it")
}
}
}
我是否需要检查 paymentQueueRestoreCompletedTransactionsFinished 中的其他参数?将我的代码与许多其他类似问题/IAP 示例进行比较,它看起来非常相似。这是沙盒环境或代码的问题吗?
queue.finishTransaction(transaction)
每个案例都丢失了;这意味着他们永远不会从队列中清除。所以下次我尝试恢复购买时,所有以前的交易都被找到(并且正在恢复)。
添加上面的代码行解决了问题。
我的申请中有4个非消耗品,购买这些作品没有任何问题。
但是,我创建了一个 restorePurchases 按钮,它可以恢复所有产品,无论用户是否购买了它们。我已经在 4 个不同的沙盒测试用户上进行了测试,结果是一致的(即对于一个从未购买过非消耗品的测试用户,点击 'restore' 恢复所有产品)
我的恢复代码如下:
@IBAction func restorePurchases(sender: UIButton) {
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
}
func paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue) {
print("transactions restored")
for transaction in queue.transactions {
let t: SKPaymentTransaction = transaction
let prodID = t.payment.productIdentifier as String
switch prodID {
case "productAbc1":
defaults.setBool(true , forKey: "productAbc1")
case "productAbc2":
defaults.setBool(true , forKey: "productAbc2")
case "productAbc3":
defaults.setBool(true , forKey: "productAbc3")
case "productAbc3":
defaults.setBool(true , forKey: "productAbc4")
default:
print("IAP not setup; enable it")
}
}
}
我是否需要检查 paymentQueueRestoreCompletedTransactionsFinished 中的其他参数?将我的代码与许多其他类似问题/IAP 示例进行比较,它看起来非常相似。这是沙盒环境或代码的问题吗?
queue.finishTransaction(transaction)
每个案例都丢失了;这意味着他们永远不会从队列中清除。所以下次我尝试恢复购买时,所有以前的交易都被找到(并且正在恢复)。
添加上面的代码行解决了问题。