恢复购买功能 - 斯威夫特

时间:2015-10-17 16:18:26

标签: ios swift in-app-purchase

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

这是我的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的变量来检测用户选择的产品。如果他点击按钮购买第一个产品,变量selectedProduct将保留值“product1”。

问题是,当用户单击“恢复购买”按钮时,应用程序会检查所选产品是“product1”还是“product2”,但如果用户单击“Restore Purchases”按钮,则selectedProduct没有值,所以没有任何事情发生。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

请勿使用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的需要进行调整。