SKProductsRequest返回0个产品的原因是什么?

我试图设置IAP,但打电话来检索产品使用SKProductsRequest SKProductsResponse数组我的委托内有一个计数为0.这是我的清单:

  • testing产品已添加到iTunes连接
  • 产品的包ID与应用包ID相匹配(并且不使用通配符)
  • SKProductRequest中设置的产品标识符与iTunes连接上创build的产品相匹配
  • 自从在iTunes连接上创build产品后,我等了好几个小时
  • configuration文件启用IAP
  • 遵循各种教程中的所有步骤,例如http://troybrant.net/blog/2010/01/in-app-purchases-a-full-walkthrough/等
  • 从设备删除应用程序,重新启动Xcode,重build等。

关于为什么提取的产品数量为零的任何其他build议?

我不相信这会是一个编码问题,但是无论如何,

… NSSet *productIdentifiers = [NSSet setWithObjects:@"redacted", nil]; self.productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers]; self.productsRequest.delegate = self; [self.productsRequest start]; … - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { NSArray *products = response.products; NSLog(@"Product count: %d", [products count]); for (SKProduct *product in products) { NSLog(@"Product: %@ %@ %f", product.productIdentifier, product.localizedTitle, product.price.floatValue); } } 

我遇到了同样的问题,通过在产品名称前发送IAP产品名称而不是我的包ID来解决。 这是一个例子:

SKProductsRequest *productRequest = [[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithObject:@"my_product"]];

而不是

SKProductsRequest *productRequest = [[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithObject:@"com.my_site.my_app.my_product"]];

我遇到过同样的问题…

我只是改变我的捆绑标识符,这不符合iTunes捆绑标识符。

而我的应用程序运行良好:)

确保您在“function”部分打开了“应用程序内购买”。 如果你不这样做,SKProductsRequest将返回0个产品。

如果您忽视了这一点,产品标识符匹配区分大小写。

所以,如果你已经用Apple的标识符创build了一个产品

com.yourcompany.product1

并且您使用产品标识符来调用产品请求

com.yourcompany.Product1

您的清单将返回零产品。

这让我忙了一会儿:-)

ps:在一个单独的项目中,我发现SKProductsRequest只在重启后才开始返回产品。 所以,如果一切都失败了,请尝试重新启动您的Mac。

检查下面列表中的所有3件事情
1)检查您的产品标识符 – 它们必须与代码和iTunes Connect中的相同 – >我的应用程序 – >您的应用程序名称 – >function – >应用程序内购买 在这里输入图像说明 2)iTunes Connect – >协议,税收和银行 – >主协议 – >付费应用 – >联系信息/银行信息/税务信息(应填写) 在这里输入图像说明 3)代码来testing它

 class ViewController: UIViewController { var requestProd = SKProductsRequest() var products = [SKProduct]() override func viewDidLoad() { super.viewDidLoad() validateProductIdentifiers() } } extension ViewController: SKProductsRequestDelegate { func validateProductIdentifiers() { let productsRequest = SKProductsRequest(productIdentifiers: Set(["candy100", "someOtherProductId"])) // Keep a strong reference to the request. self.requestProd = productsRequest; productsRequest.delegate = self productsRequest.start() } // SKProductsRequestDelegate protocol method public func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) { self.products = response.products for invalidIdentifier in response.invalidProductIdentifiers { print(invalidIdentifier) } } } 

有些时候,这些types的问题有很多解决scheme。 在做了一些调查之后,我发现它有时候有助于删除应用程序,然后再次安装( 应用程序内购买,SKProductsRequest返回0 – 产品仍然在审查中 )您还正在使用哪个版本的iOS?

初步答案

你有你的合同,银行等信息设置?

更正了答案

看来我错了。 看看应用程序内购买,SKProductsRequest返回0 – 产品仍在审查

不知道为什么,但我刚刚到iOS的Settings > iTunes & App StoresLog out

请不要在iTunesConnect中设置产品的价格。我错过了,产品为零。我整天都在忙着解决这个问题。

另外,请记住,同意支付应用程序cotract是不够的。 您还必须填写联系人,银行和税务信息的具体协议,因为它被视为完成。