我的应用程序中有4个非耗材,购买这些作品时没有任何问题。
但是,我创建了一个restorePurchases按钮,无论用户是否购买了产品,都会恢复所有产品。我已经在4个不同的砂箱测试用户上测试了这个,结果是一致的(即对于从未购买非耗材的测试用户,点击'恢复'恢复所有产品)
我的恢复代码如下:
@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示例进行比较,它看起来几乎相同。这是沙盒环境或代码的问题吗?
答案 0 :(得分:0)
queue.finishTransaction(transaction)
每个案件都缺失了;意思是他们永远不会从队列中清除。因此,下次我尝试恢复购买时,会找到所有以前的交易(并恢复)。
添加上面的代码解决了这个问题。