Swift IAP restoreCompletedTransactions甚至可以恢复非购买的商品

时间:2016-03-16 20:05:04

标签: ios swift in-app-purchase

我的应用程序中有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示例进行比较,它看起来几乎相同。这是沙盒环境或代码的问题吗?

1 个答案:

答案 0 :(得分:0)

queue.finishTransaction(transaction) 

每个案件都缺失了;意思是他们永远不会从队列中清除。因此,下次我尝试恢复购买时,会找到所有以前的交易(并恢复)。

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