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

时间:2014-01-28 00:03:01

标签: ios in-app-purchase

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

  • 测试产品已添加到iTunes连接
  • 产品的捆绑ID与应用捆绑ID相匹配(并且不使用通配符)
  • SKProductRequest中设置的产品标识符与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);
    }
}

16 个答案:

答案 0 :(得分:26)

检查下面列表中的所有3件事 1)检查您的产品标识符 - 它们必须与您的代码和iTunes Connect中的完全相同 - >我的应用 - > YourAppName - >特点 - >应用内购买 enter image description here 2)iTunes Connect - >协议,税收和银行业务 - >主协议 - >付费应用 - >联系信息/银行信息/税务信息(应填写)enter image description here 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)
        }

    }
}

答案 1 :(得分:12)

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

答案 2 :(得分:11)

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

答案 3 :(得分:9)

我有同样的问题......

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

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

答案 4 :(得分:6)

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

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

的产品
  

com.yourcompany.product1

并使用产品标识符

调用产品请求
  

com.yourcompany.Product1

您的清单将以零产品的形式退回。

这让我忙碌了一段时间: - )

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

答案 5 :(得分:3)

在迅速5中,我面临着让Skproducts计数为0的相同问题。 转到enter image description here iTunes Connect->协议和税收,如果状态为“新建”,则除了状态外,还应有“条款查看”按钮,单击它填写完整的表格,然后付费应用程序将显示为活动状态,并且在xcode控制台。

答案 6 :(得分:2)

让我们转到iOS的设置&gt; iTunes&amp;应用商店退出

希望这对你有所帮助,我不知道为什么:D

答案 7 :(得分:1)

有时候,这些类型的问题都有很多解决方案。在做了一些研究之后,我发现删除应用程序然后重新安装它有时会有所帮助(In-App Purchase, SKProductsRequest returning 0 - Products still in Review)你还在使用什么版本的iOS?

答案 8 :(得分:1)

初步回答

您是否已获得合同,银行等信息设置?

更正了答案

我觉得这个错了。看看In-App Purchase, SKProductsRequest returning 0 - Products still in Review

答案 9 :(得分:1)

请问您是否在iTunesConnect中设定了产品的价格。我错过了,产品为零。我整天都想知道这一点。

答案 10 :(得分:0)

此外,请记住,同意付费应用程序cotract是不够的。您还必须专门填写该协议的联系人,银行和税务信息,以便将其视为已完成。

答案 11 :(得分:0)

经过深入挖掘后,以下步骤解决了我为SKProductsRequest获取0件产品的问题。

转到设置&gt;在iOS设备上登录iPhone 。如果您已使用原始Apple ID登录,请点击它并选择退出。然后只需使用您在iTunes Connect中创建的沙盒测试器的凭据登录。

答案 12 :(得分:0)

某些 macOS 10.14系统上,我得到了一个空的SKProductsResponse.products数组,而其他系统工作得很好,并返回了适用于我应用的当前IAP的有效列表。

相同应用,相同的代码。
用户在两台计算机上登录了相同的App Store帐户

那太奇怪了。

答案 13 :(得分:0)

在我看来,这是一个错误。在模拟器中,所有产品标识符均失败,并被标记为无效。在实际设备中,所有产品请求均已成功获取产品。

TvOS 4K

答案 14 :(得分:0)

即使在接受 App Store 中的税收和协议部分后,我也遇到了这个问题。我曾经多次更改我的应用程序包 ID(用于将构建发送给测试人员),我怀疑这可能是问题所在。所以我按如下方式解决了这个问题。
转到xAxis: { axisLine: { show: false, // Hide full Line }, xisTick: { show: false, // Hide Ticks, }, } 。应该是Target -> BuildSettings -> Search for "Product Bundle Identifier"
更新后转到$(PRODUCT_BUNDLE_IDENTIFIER)。输入具有应用内购买功能的正确捆绑 ID。完成此更改后,我可以列出产品

答案 15 :(得分:0)

Swift 5 xcode 12.4 模拟器 返回零个产品。

使用物理设备正确退货