SKProductsrequest在Swift中没有返回任何内容

Joe*_*ang 3 in-app-purchase ios skproduct swift skpaymenttransaction

我已经谷歌这个问题几个小时了.我试过类似的事情:

  1. 确认捆绑标识符和产品ID绝对正确
  2. 在模拟器和真实设备上删除并重新安装应用程序
  3. 我试过'productID'和'com.company.project.productID'
  4. iTunes连接中的IAP也应该正确配置

我唯一不确定的是我没有在iTunes连接中填写Banking和Tax.实际上,我刚刚填写了银行信息,但需要24小时才能更新.

我的代码看起来像这样

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    // Set IAPS
    if(SKPaymentQueue.canMakePayments()) {
        println("IAP is enabled, loading")
        var productID:NSSet = NSSet(objects: "ProductID")
        var request: SKProductsRequest = SKProductsRequest(productIdentifiers: productID as Set<NSObject>)
        request.delegate = self
        request.start()
    } else {
        println("please enable IAPS")
    }      
}

func productsRequest(request: SKProductsRequest!, didReceiveResponse response: SKProductsResponse!) {
    println("product request")
    var myProduct = response.products

    for product in myProduct {
        println("product added")
        println(product.productIdentifier)
        println(product.localizedTitle)
        println(product.localizedDescription)
        println(product.price)

        list.append(product as! SKProduct)
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码来自一个例子,它在我的模拟器中运行得非常好.但是当我用我自己的productID替换ProductID时(当然也包括bundleID),SKProductsrequest变成什么都不返回.

我不知道为什么,希望有人可以帮助我.谢谢!

Nat*_*lia 5

我整个星期都遇到过这个问题 - 无论我尝试使用代码并调整构建和配置设置,我都没有回复产品.

最后修复它的是将我的应用程序xcode的包ID更改company.appnamecom.company.appname.同时,您希望以格式com.company.appname.thingforpurchase1等方式引用您的应用内购买ID .

在尝试解决此问题时,我重新完成了在项目中设置自动配置和构建设置的过程,并重新将我的开发人员帐户重新添加到xcode.执行此操作后,上述语法对我有用.请注意,在itunes connect上,我的应用程序的包ID仍被指定为公正company.appname,但由于某些原因,在xcode中它也需要com.在开始时.

还有另外一件事我不得不采用与Swift 2.0和Swift 1.x不同的方式 - 编译器将不再接受产品ID不再是NSSet- 而是请求似乎希望标识符被给出 Set<String>- 请参阅以下示例.

请注意,此解决方案是使用swift 2.0和xcode 7 beta开发的.

例如:

func requestProductInfo() {
    print("about to fetch product info")
    if SKPaymentQueue.canMakePayments() {
            let request = SKProductsRequest(productIdentifiers:
                Set(productIDs))

            let productIdentifiers: NSSet = NSSet(array: productIDs) // NSset might need to be mutable
            let productRequest : SKProductsRequest = SKProductsRequest(productIdentifiers: productIdentifiers as! Set<String>)

            //we set our class as its delegate (so we can handle the response)& trigger the request.
            productRequest.delegate = self
            productRequest.start()
            print("Fetching Products");
        }
        else {
            print("can't make purchases")
        }
    }
Run Code Online (Sandbox Code Playgroud)