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

时间:2015-05-04 10:41:33

标签: ios swift in-app-purchase skproduct skpaymenttransaction

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

  1. 确认捆绑标识符和产品ID绝对正确
  2. 在模拟器和真实设备上删除并重新安装应用
  3. 我已经尝试过' productID'和' com.company.project.productID'
  4. iTunes连接中的IAP也应正确配置
  5. 我唯一不确定的是我在iTunes连接中没有填写银行和税务的东西。实际上,我刚刚填写了银行信息,但需要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)
        }
    }
    

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

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

2 个答案:

答案 0 :(得分:5)

我整个星期都遇到过这个问题 - 无论我在编写代码方面做了什么,并且调整了我的版本和版本。配置设置,我没有产品回来。

最终为我修复的是将我的应用xcode的包ID从company.appname更改为com.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")
        }
    }

答案 1 :(得分:0)

问题出在美国税收表格和协议上。一旦获得批准,一切都会起作用。