SKProductsrequest在Swift中什么都不会返回

问题描述:

我几个小时都在谷歌这个问题。我曾尝试类似:SKProductsrequest在Swift中什么都不会返回

  1. 确认捆绑标识符和产品ID是完全正确的
  2. 删除并重新安装应用程序在两个模拟器和真实设备
  3. 我尝试两个“的productID”和“com.company。 project.productID”
  4. 在iTunes的IAP进行连接应配置正确,以及

我不知道的唯一的事情是,我还没有填写我的iTunes银行和税务的东西连接。其实,我刚刚填写了银行信息,但需要24小时更新。

我的代码看起来像这样

​​

此代码是从例子,它的工作相当不错,在我的模拟器。但是,当我用我自己的productID替换产品ID(当然也包括bundleID)时,SKProductsrequest将不会返回任何内容。

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

+0

嗨乔伊,是这个问题已经解决了吗?因为我的问题与你的问题相同。 – bennysantoso

我整个星期都遇到了这个问题 - 无论我尝试使用代码明智的方式,并调整了构建配置设置&,我都没有收回任何产品。

终于为我修好了,是我的应用程序xcode的包ID从company.appname更改为com.company.appname。同时,您希望使用com.company.appname.thingforpurchase1等格式引用您的应用内购买ID。

在试图解决此问题时,我重新设置了项目内的自动配置过程并设置了设置&我重新添加了我的开发者账户再次xcode。这样做后,上面的语法为我工作。请注意,在iTunes连接时,我的应用程序捆绑包ID仍然被指定为company.appname,但由于某种原因,在xcode中,它在开始时也需要com.

还有一件事我不得不采取与Swift 2.0和Swift 1.x不同的做法 - 编译器将不再接受产品ID不再是NSSet - 而是请求似乎希望标识符被赋予为a 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") 
     } 
    }