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) 

每个案例都丢失了;这意味着他们永远不会从队列中清除。所以下次我尝试恢复购买时,所有以前的交易都被找到(并且正在恢复)。

添加上面的代码行解决了问题。