Swift 应用内购买恢复按钮不可用';你不会引起任何行动吗?

Swift 应用内购买恢复按钮不可用';你不会引起任何行动吗?,swift,xcode,in-app-purchase,Swift,Xcode,In App Purchase,我不熟悉应用内购买。我已将我的应用程序设置为允许在应用程序中使用多个非耗材。如果这是第一次购买,它的工作非常完美。如果我再次尝试单击“购买”按钮,它会显示“此应用程序内的内容已购买等”。单击“确定”后,它将不起任何作用。我注意到它只显示“OK”作为选项,而不是“Cancel”和“Okay”。在我的测试应用程序中,它显示了这两个方面,效果非常好! 让product1=“TestAd.com” @IBOUTLE弱var adView1:UIView func buyProduct1(product1

我不熟悉应用内购买。我已将我的应用程序设置为允许在应用程序中使用多个非耗材。如果这是第一次购买,它的工作非常完美。如果我再次尝试单击“购买”按钮,它会显示“此应用程序内的内容已购买等”。单击“确定”后,它将不起任何作用。我注意到它只显示“OK”作为选项,而不是“Cancel”和“Okay”。在我的测试应用程序中,它显示了这两个方面,效果非常好! 让product1=“TestAd.com” @IBOUTLE弱var adView1:UIView

func buyProduct1(product1: SKProduct){
     print("Sending the Payment Request to Apple 1");
     let payment1 = SKPayment(product: product1)
     SKPaymentQueue.default().add(payment1);
 }

@IBAction func product1Btn(sender: AnyObject) {

   buyProductID.text = "Product1"
   print("About to fetch the product... 1")

            // Can make payments
            if (SKPaymentQueue.canMakePayments())
            {
                let productID1:NSSet = NSSet(object: self.product1);
                let productsRequest1:SKProductsRequest = SKProductsRequest(productIdentifiers: productID1 as! Set<String>);
                productsRequest1.delegate = self;
                productsRequest1.start();
                print("Fetching Products 1");
            }else{
                print("Can't make purchases 1");
            }
}


func purchase1ViewDid(){

    if (UserDefaults.standard.bool(forKey: "purchased1")){
        adView1.isHidden = true
        print("No ads for 1")
    } else {
        print("Yes ads 1")
    }
}





func productsRequest (_ request: SKProductsRequest, didReceive response: SKProductsResponse) {

//PRODUCT 1
let count1 : Int = response.products.count
if (count1>0) {
    let validProduct1: SKProduct = response.products[0] as SKProduct
    if (validProduct1.productIdentifier == self.product1) {
        print(validProduct1.localizedTitle)
        print(validProduct1.localizedDescription)
        print(validProduct1.price)
        buyProduct1(product1: validProduct1);
    } else {
        print(validProduct1.productIdentifier)
    }
} else {
    print("nothing 1")
}

`

非消耗性采购只能购买一次,因此这是预期行为。显示此消息是因为您只能购买一次非消耗性项目,并且它仍然与帐户关联。它认为既然您已经购买了该物品,那么您只需要恢复它。作为旁注,出于测试目的,IAP必须使用真实设备进行测试,因此模拟器无法正确测试IAP

非消耗性采购只能购买一次,因此这是预期行为。显示此消息是因为您只能购买一次非消耗性项目,并且它仍然与帐户关联。它认为既然您已经购买了该物品,那么您只需要恢复它。作为旁注,出于测试目的,IAP必须使用真实设备进行测试,因此模拟器无法正确测试IAP

   func request(_ request: SKRequest, didFailWithError error: Error) {
        print("Error Fetching product information 1");
    }


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



        for transaction1:AnyObject in transactions1 {
            if let trans:SKPaymentTransaction = transaction1 as? SKPaymentTransaction{
                switch trans.transactionState {
                case .purchased:


                    if buyProductID.text == "Product1" {

                        print("Product Purchased 1");
                        SKPaymentQueue.default().finishTransaction(transaction1 as! SKPaymentTransaction)
                        // Handle the purchase
                        UserDefaults.standard.set(true , forKey: "purchased1")
                        adView1.isHidden = true

                    }

                    break;
                case .failed:
                    print("Purchased Failed 1");
                    SKPaymentQueue.default().finishTransaction(transaction1 as! SKPaymentTransaction)
                    break;



                case .restored:
                    print("Already Purchased 1");
                    SKPaymentQueue.default().restoreCompletedTransactions()


                    // Handle the purchase
                    UserDefaults.standard.set(true , forKey: "purchased1")
                    adView1.isHidden = true
                    break;
                default:
                    break;
                }
            }
        }
    }