SKProductsRequest返回0个产品

tee*_*tee 8 itunesconnect in-app-purchase ios

我正在尝试进行IAP,但出于某种原因,我的SKProductsRequest返回0个产品.

-Test产品已添加到iTunes正常连接

- 填写银行和税务信息

- 产品的包ID与应用包ID匹配

- 我等了两天才能通过服务器进行处理

我使用这个youtube教程来构建应用程序:https: //www.youtube.com/watch?v = zRrs7O5yjKI

以下是代码:

import UIKit
import StoreKit

class ViewController: UIViewController, SKProductsRequestDelegate, SKPaymentTransactionObserver {

    @IBOutlet weak var lblAd: UILabel!
    @IBOutlet weak var lblCoinAmount: UILabel!

    @IBOutlet weak var outRemoveAds: UIButton!
    @IBOutlet weak var outAddCoins: UIButton!
    @IBOutlet weak var outRestorePurchases: UIButton!



    var coins = 50

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        outRemoveAds.isEnabled = false
        outAddCoins.isEnabled = false
        outRestorePurchases.isEnabled = false

        if(SKPaymentQueue.canMakePayments()) {
            print("IAP is enabled, loading")
            let productID: NSSet = NSSet(objects: "com.IAPTesters.10Dolla", "com.IAPTesters.RemoveAds")
            let request: SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>)
            request.delegate = self
            request.start()
        } else {
            print("please enable IAPS")
        }
    }
    @IBAction func btnRemoveAds(_ sender: Any) {
        print("rem ads")
        for product in list {
            let prodID = product.productIdentifier
            if(prodID == "com.IAPTesters.RemoveAds") {
                p = product
                buyProduct()
            }
        }
    }

    @IBAction func btnAddCoins(_ sender: Any) {
        for product in list {
            let prodID = product.productIdentifier
            if(prodID == "com.IAPTesters.10Dolla") {
                p = product
                buyProduct()
            }
        }
    }

    @IBAction func btnRestorePurchases(_ sender: Any) {
        SKPaymentQueue.default().add(self)
        SKPaymentQueue.default().restoreCompletedTransactions()
    }

    func buyProduct() {
        print("buy " + p.productIdentifier)
        let pay = SKPayment(product: p)
        SKPaymentQueue.default().add(self)
        SKPaymentQueue.default().add(pay as SKPayment)
    }

    func removeAds() {
        lblAd.removeFromSuperview()
    }

    func addCoins() {
        coins += 50
        lblCoinAmount.text = "\(coins)"
    }

    var list = [SKProduct]()
    var p = SKProduct()

    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
        print("product request")
        let myProduct = response.products
        for product in myProduct {
            print("product added")
            print(product.productIdentifier)
            print(product.localizedTitle)
            print(product.localizedDescription)
            print(product.price)

            list.append(product)
        }

        outRemoveAds.isEnabled = true
        outAddCoins.isEnabled = true
        outRestorePurchases.isEnabled = true
    }

    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 "com.IAPTesters.RemoveAds":
                print("remove ads")
                removeAds()
            case "com.IAPTesters.10Dolla":
                print("add coins to account")
                addCoins()
            default:
                print("IAP not found")
            }
        }
    }

    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        print("add payment")

        for transaction: AnyObject in transactions {
            let trans = transaction as! SKPaymentTransaction
            print(trans.error)
            switch trans.transactionState {
            case .purchased:
                print("buy ok, unlock IAP HERE")
                print(p.productIdentifier)

                let prodID = p.productIdentifier
                switch prodID {
                case "com.IAPTesters.RemoveAds":
                    print("remove ads")
                    removeAds()
                case "com.IAPTesters.10Dolla":
                    print("add coins to account")
                    addCoins()
                default:
                    print("IAP not found")
                }
                queue.finishTransaction(trans)
            case .failed:
                print("buy error")
                queue.finishTransaction(trans)
                break
            default:
                print("Default")
                break
            }
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
Run Code Online (Sandbox Code Playgroud)

当您运行应用程序时,它将打印"IAP已启用,正在加载"而不是"产品请求",但没有其他内容.

如果我response.invalidProductIdentifiers在productsRequest函数中打印它将返回我的产品:["com.IAPTesters.RemoveAds", "com.IAPTesters.10Dolla"]

在此先感谢您的帮助

tee*_*tee 4

事实证明,我的银行和税务信息填写不正确。我重新装满它,然后我不得不等待大约 30 分钟它才能再次工作。现在一切正常!感谢所有的帮助