在应用程序购买不完全解雇

时间:2017-04-20 03:23:11

标签: ios swift in-app-purchase itunesconnect

每当我在沙盒环境中进行应用程序内购买时,它就像它正在完成一样,当它真的不是时。更具体地说,我点击购买更多硬币,我确认我想在沙盒环境中购买它们。然后它说"你已经全部准备好了!"说我已完成购买。好吧,当我查看我的硬币时,没有任何改变!

查看代码后,我意识到了

func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!)    {

......没有解雇。

完整代码:

import UIKit
import StoreKit
import AVFoundation

class InAppPurchases: UIViewController, SKProductsRequestDelegate, SKPaymentTransactionObserver {

@IBOutlet weak var noAdsBtn: UIButton!

var product_id: String?
 let defaultsAD = UserDefaults.standard

override func viewDidLoad() {
    super.viewDidLoad()
    product_id = "noads"



    SKPaymentQueue.default().add(self)

    //Check if product is purchased
    if (defaultsAD.bool(forKey: "purchased")){
        // Hide a view or show content depends on your requirement
        // overlayView.hidden = true
        noAdsBtn.backgroundColor = UIColor.red
        noAdsBtn.isUserInteractionEnabled = false
    } else  {
        print("false")
        // noAds = true
        // var NAD = UserDefaults.standard
        // NAD.setValue(noAds, forKey: "nad")
        // NAD.synchronize()
    }
    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBAction func backBtnA(_ sender: Any) {
    music2()
}

/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
}
*/
@IBAction func Buy600(_ sender: Any) {
    print("About to fetch the products")
    product_id = "600coins"
    // We check that we are allow to make the purchase.
    if (SKPaymentQueue.canMakePayments()) {
        var productID:NSSet = NSSet(object: self.product_id!);
        var productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>);
        productsRequest.delegate = self;
        productsRequest.start();
        print("Fetching Products");
    } else {
        print("can't make purchases");
    }
}
@IBAction func buy1500(_ sender: Any) {
    print("About to fetch the products")
    product_id = "1500coins"
    // We check that we are allow to make the purchase.
    if (SKPaymentQueue.canMakePayments()) {
        var productID:NSSet = NSSet(object: self.product_id!);
        var productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>);
        productsRequest.delegate = self;
        productsRequest.start();
        print("Fetching Products");
    } else {
        print("can't make purchases");
    }
}
@IBAction func buy3500(_ sender: Any) {
    print("About to fetch the products")
    product_id = "3500coins"
    // We check that we are allow to make the purchase.
    if (SKPaymentQueue.canMakePayments()) {
        var productID:NSSet = NSSet(object: self.product_id!);
        var productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>);
        productsRequest.delegate = self;
        productsRequest.start();
        print("Fetching Products");
    } else {
        print("can't make purchases");
    }
        }
@IBAction func buy8000(_ sender: Any) {
    print("About to fetch the products")
    product_id = "8000coins"
    // We check that we are allow to make the purchase.
    if (SKPaymentQueue.canMakePayments()) {
        var productID:NSSet = NSSet(object: self.product_id!);
        var productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>);
        productsRequest.delegate = self;
        productsRequest.start();
        print("Fetching Products");
    } else {
        print("can't make purchases");
    }
       }
@IBAction func buy25000(_ sender: Any) {
    print("About to fetch the products")
    product_id = "25000coins"
    // We check that we are allow to make the purchase.
    if (SKPaymentQueue.canMakePayments()) {
        var productID:NSSet = NSSet(object: self.product_id!);
        var productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>);
        productsRequest.delegate = self;
        productsRequest.start();
        print("Fetching Products");
    } else {
        print("can't make purchases");
    }
        }
@IBAction func buyTruckload(_ sender: Any) {
    print("About to fetch the products")
    product_id = "truckloadofcoins"
    // We check that we are allow to make the purchase.
    if (SKPaymentQueue.canMakePayments()) {
        var productID:NSSet = NSSet(object: self.product_id!);
        var productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>);
        productsRequest.delegate = self;
        productsRequest.start();
        print("Fetching Products");
    } else {
        print("can't make purchases");
    }
}
@IBAction func buyNoAds(_ sender: Any) {
    print("About to fetch the products")
    product_id = "noads"
    // We check that we are allow to make the purchase.
    if (SKPaymentQueue.canMakePayments()) {
        var productID:NSSet = NSSet(object: self.product_id!);
        var productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>);
        productsRequest.delegate = self;
        productsRequest.start();
        print("Fetching Products");
    } else {
        print("can't make purchases");
    }
}


func buyProduct(product: SKProduct){
    print("Sending the Payment Request to Apple");
    let payment = SKPayment(product: product)
    SKPaymentQueue.default().add(payment);

    //
    SKPaymentQueue.default().add(self)
    //^^??
}
func productsRequest (_ request: SKProductsRequest, didReceive response: SKProductsResponse) {

    let count : Int = response.products.count
    if (count>0) {
        let validProduct: SKProduct = response.products[0] as SKProduct
        if (validProduct.productIdentifier == self.product_id) {
            print(validProduct.localizedTitle)
            print(validProduct.localizedDescription)
            print(validProduct.price)
            buyProduct(product: validProduct);
        } else {
            print(validProduct.productIdentifier)
        }
    } else {
        print("nothing")
    }
}


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

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

    for transaction:AnyObject in transactions {
        if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{
            switch trans.transactionState {
            case .purchased:
                print("Product Purchased");
                SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
                if product_id == "noads"{
                    defaultsAD.set(true , forKey: "purchased")
                    noAdsBtn.backgroundColor = UIColor.red
                    noAdsBtn.isUserInteractionEnabled = false
                    noAds = true
                    var NAD = UserDefaults.standard
                    NAD.setValue(noAds, forKey: "nad")
                    NAD.synchronize()
                }
                    //add coins
                    if product_id == "600coins"{
                        coins += 600
                        print("just bought 600 coins")
                        var C = UserDefaults.standard
                        C.setValue(coins, forKey: "c")
                        C.synchronize()
                         SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
                    }
                    if product_id == "1500coins"{
                        coins += 1500
                        var C = UserDefaults.standard
                        C.setValue(coins, forKey: "c")
                        C.synchronize()
                         SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
                    }
                    if product_id == "3500coins"{
                        coins += 3500
                        var C = UserDefaults.standard
                        C.setValue(coins, forKey: "c")
                        C.synchronize()
                         SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
                    }
                    if product_id == "8000coins"{
                        coins += 8000
                        var C = UserDefaults.standard
                        C.setValue(coins, forKey: "c")
                        C.synchronize()
                         SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
                    }
                    if product_id == "25000coins"{
                        coins += 25000
                        var C = UserDefaults.standard
                        C.setValue(coins, forKey: "c")
                        C.synchronize()
                        print("just boughtn 25k coins")
                         SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
                    }
                    if product_id == "100000coins"{
                        coins += 100000
                        var C = UserDefaults.standard
                        C.setValue(coins, forKey: "c")
                        C.synchronize()
                         SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
                    }

                // overlayView.hidden = true
                break;
            case .failed:
                print("Purchased Failed");
                SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction)
                break;
            case .restored:
                print("Already Purchased");
                SKPaymentQueue.default().restoreCompletedTransactions()
                if product_id == "noads"{
                    defaultsAD.set(true , forKey: "purchased")
                    noAdsBtn.backgroundColor = UIColor.red
                    noAdsBtn.isUserInteractionEnabled = false
                    noAds = true
                    var NAD = UserDefaults.standard
                    NAD.setValue(noAds, forKey: "nad")
                    NAD.synchronize()
                }else{
                    //add coins
                    if product_id == "600coins"{
                        coins += 600
                        print("already bought")
                        var C = UserDefaults.standard
                        C.setValue(coins, forKey: "c")
                        C.synchronize()
                    }
                    if product_id == "1500coins"{
                        coins += 1500
                        var C = UserDefaults.standard
                        C.setValue(coins, forKey: "c")
                        C.synchronize()
                    }
                    if product_id == "3500coins"{
                        coins += 3500
                        var C = UserDefaults.standard
                        C.setValue(coins, forKey: "c")
                        C.synchronize()
                    }
                    if product_id == "8000coins"{
                        coins += 8000
                        var C = UserDefaults.standard
                        C.setValue(coins, forKey: "c")
                        C.synchronize()
                    }
                    if product_id == "25000coins"{
                        coins += 25000
                        var C = UserDefaults.standard
                        C.setValue(coins, forKey: "c")
                        C.synchronize()
                    }
                    if product_id == "100000coins"{
                        coins += 100000
                        var C = UserDefaults.standard
                        C.setValue(coins, forKey: "c")
                        C.synchronize()
                    }
                }

            default:
                break;
            }
        }
    }        
}
func paymentQueue(_ queue: SKPaymentQueue,
                  updatedTransactions transactions: [SKPaymentTransaction]){
    print("updating transactions")

}
func music2(){
    // currentlyPlayingAudio = true
    //  print("\n\n\n\n\n\n\n\n\nview appeared...music??\n\n\n\n\n\n\n\n\n")
    if soundFX == true{
        let ButtonAudioURL2 = URL(fileURLWithPath: Bundle.main.path(forResource: "Click2", ofType: "mp3")!)
        do {
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
        } catch _ {
        }
        do {
            try AVAudioSession.sharedInstance().setActive(true)
        } catch _ {
        }




        var error: NSError?
        do {
            audioPlayerClick = try AVAudioPlayer(contentsOf: ButtonAudioURL2)
        } catch let error1 as NSError {
            error = error1

        }
        audioPlayerClick.prepareToPlay()

        // audioPlayer.volume = 0.3
        audioPlayerClick.play()
    }
}
func music3(){
    // currentlyPlayingAudio = true
    //  print("\n\n\n\n\n\n\n\n\nview appeared...music??\n\n\n\n\n\n\n\n\n")
    if soundFX == true{
        let ButtonAudioURL3 = URL(fileURLWithPath: Bundle.main.path(forResource: "Toggle", ofType: "mp3")!)
        do {
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
        } catch _ {
        }
        do {
            try AVAudioSession.sharedInstance().setActive(true)
        } catch _ {
        }




        var error: NSError?
        do {
            audioPlayerClick2 = try AVAudioPlayer(contentsOf: ButtonAudioURL3)
        } catch let error1 as NSError {
            error = error1

        }
        audioPlayerClick2.prepareToPlay()

        // audioPlayer.volume = 0.3
        audioPlayerClick2.play()
    }
  }


}

最后一件事; IAP删除广告(ID为#34; noads&#34;)不断返回&#34;没有&#34;在控制台中。任何想法为什么它不能成功触发?它是非消耗品,在iTunes Connect中标记为&#34;等待上传&#34;。

0 个答案:

没有答案