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

Gru*_*kes 48 in-app-purchase ios

我正在尝试设置IAP,但在使用SKProductsRequest调用检索产品后,我的委托中的SKProductsResponse数组的计数为0.这是我的清单:

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

有关为什么取出的产品数为零的任何其他建议?

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

…

        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);
    }
}
Run Code Online (Sandbox Code Playgroud)

ua2*_*a24 33

检查下面列表中的所有3件事情
1)检查您的产品标识符 - 它们必须与您的代码和iTunes Connect中的完全相同 - >我的应用程序 - > YourAppName - >功能 - >应用程序内购买 在此输入图像描述 2)iTunes Connect - >协议,税务和银行业务 - >主协议 - >付费申请 - >联系信息/银行信息/税务信息(应填写)在此输入图像描述 3)测试它的代码

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)
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

  • 今天确认,"付费申请"合同确实必须由SKProductRequest返回IAP.如果合同未决,则返回[0]. (6认同)
  • 所以如果没有填写银行和税务信息,即使在测试模式下它也不起作用? (2认同)

Ahs*_*him 13

我遇到了同样的问题,通过在产品名称之前只发送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"]];


Har*_*ris 11

确保在"功能"部分中启用了"应用程序内购买".如果不这样做,SKProductsRequest将返回0个产品.

  • 这个简单的解决方案为我解决了问题!在沙盒中,我把一切都工作了,没有迹象表明存在任何错误,即使是优化的发布版本.但是,每次购买尝试时,应用程序商店版本都已崩溃. (2认同)

Vis*_*l16 10

我遇到过同样的问题...

我只是更改了我的Bundle Identifier,它与iTunes捆绑包标识符不匹配.

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


nsp*_*ire 7

如果您忽略了这一点,那么产品标识符匹配区分大小写.

因此,如果您在Apple上创建了一个标识为say的产品

com.yourcompany.product1

并使用产品标识符调用产品请求

com.yourcompany.Product1

您的清单将以零产品退回.

这让我忙了一会儿:-)

ps:在一个单独的项目中,我发现SKProductsRequest仅在重启后才开始返回产品.因此,如果所有其他方法都失败了,请尝试重新启动Mac.


小智 5

在 swift 5 中,我遇到了同样的问题,让 Skproducts 计数为 0。我解决了这个 Goto在此输入图像描述iTunes Connect -> 协议和税收 如果状态为“新”,那么除了状态之外还应该有术语查看按钮,单击它填写完整的表格,然后付费应用程序将显示为活动状态,并且 Skproducts 计数将在 xcode 控制台中可见。


vir*_*ndh 2

有时,针对此类问题有非常有效的解决方案。经过一些研究,我发现删除应用程序然后再次安装有时会有所帮助(应用内购买,SKProductsRequest 返回 0 - 产品仍在审核中)另外,您使用的 iOS 版本是什么?