恢复购买功能 - Swift

Restore Purchases function - Swift

在我的应用中,用户可以进行两次不同的购买。

这是我的 paymentQueue 函数:

func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    print("Received Payment Transaction Response from Apple")

    for transaction:AnyObject in transactions {
        if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction {
            switch trans.transactionState {

            case .Purchased, . Restored:
                print("Product Purchased / Restored")
                SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)

                // TO DO
                if selectedProduct == "product1" {
                    NSUserDefaults.standardUserDefaults().setBool(true, forKey: "product1Purchased")
                } else if selectedProduct == "product2" {
                    NSUserDefaults.standardUserDefaults().setBool(true, forKey: "product2Purchased")
                }
            case .Failed:
                print("Purchased Failed")
                SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
                break
            default:
                break
            }
        }
    }
}

我创建了一个名为 selectedProduct 的变量来检测用户 select 的产品。如果他点击购买第一个产品的按钮,变量 selectedProduct 保存值 "product1"。

问题是当用户单击“恢复购买”按钮时,应用会检查 selected 的产品是 "product1" 还是 "product2",但 selectedProduct 没有如果用户单击“恢复购买”按钮,则不会发生任何事情。

请问我该怎么办?

不要使用 selectedProduct 等变量来确定购买或恢复了哪个产品。在 SKPaymentTransaction 中查看所需信息。

        case .Purchased, . Restored:
            print("Product Purchased / Restored")
            SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)

            if trans.payment.productIdentifier == "product1" {
                NSUserDefaults.standardUserDefaults().setBool(true, forKey: "product1Purchased")
            } else if trans.payment.productIdentifier == "product2" {
                NSUserDefaults.standardUserDefaults().setBool(true, forKey: "product2Purchased")
            }

根据实际产品 ID 的需要进行调整。