SKProductsrequest 在 Swift 中不返回任何内容

Posted

技术标签:

【中文标题】SKProductsrequest 在 Swift 中不返回任何内容【英文标题】:SKProductsrequest return nothing in Swift 【发布时间】:2015-05-04 10:41:32 【问题描述】:

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

    确认 Bundle Identifier 和产品 ID 绝对正确 在模拟器和真实设备上删除并重新安装应用程序 “productID”和“com.company.project.productID”我都试过了 iTunes 连接中的 IAP 也应配置正确

我唯一不确定的是我没有在我的 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 变成什么都不返回。

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

【问题讨论】:

嗨乔伊,问题解决了吗?因为我对你的问题有同样的问题.. 【参考方案1】:

我整个星期都在遇到这个问题 - 无论我如何尝试明智的代码并调整我的构建和配置设置,我都没有收到任何产品。

最终为我解决的问题是将我的应用程序 xcode 的捆绑包 ID 从 company.appname 更改为 com.company.appname。同时你想引用你的应用内购买ID,格式为com.company.appname.thingforpurchase1等。

为了解决这个问题,我重新进行了在项目中设置自动配置和构建设置的过程,并再次将我的开发人员帐户重新添加到 xcode。这样做之后,上面的语法对我有用。请注意,在 iTunes Connect 上,我的应用程序的捆绑 ID 仍指定为 company.appname,但由于某些原因,在 xcode 中它也需要在开始时使用 com.

对于 Swift 2.0 和 Swift 1.x,我还必须做不同的另一件事——编译器将不再接受产品 ID 不再是 NSSet——相反,请求似乎希望提供标识符作为Set&lt;String&gt; - 请参阅下面的示例。

请注意,此解决方案是在 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")
        
    

【讨论】:

【参考方案2】:

问题出在美国税表和协议上。一旦获得批准,一切都会奏效。

【讨论】:

以上是关于SKProductsrequest 在 Swift 中不返回任何内容的主要内容,如果未能解决你的问题,请参考以下文章

为啥 SKProductsRequest 需要产品标识符?

SKProductsRequest 不会在 Catalyst 应用程序中返回 SKProductsResponse

未从 SKProductsRequest 收到应用内购买 SKProduct

iPhone - SKProductsRequest 和“发送到已释放实例的消息”

iOS Crash Report SKProductsRequest

SKProductsRequest 未返回任何产品