Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SKProductsRequest返回0个产品的原因?_Ios_In App Purchase - Fatal编程技术网

Ios SKProductsRequest返回0个产品的原因?

Ios SKProductsRequest返回0个产品的原因?,ios,in-app-purchase,Ios,In App Purchase,我正在尝试设置IAP,但在使用SKProductsRequest调用检索产品后,我的委托中的SKProductsResponse数组的计数为0。这是我的清单: 测试产品已添加到iTunes connect 该产品的捆绑包id与应用程序捆绑包id匹配(且不使用通配符) SKProductRequest中设置的产品标识符与iTunes connect上创建的产品匹配 自从产品在iTunes connect上创建以来,我已经等了好几个小时了 配置配置文件启用IAP 遵循各种教程中的所有步骤,如等 已

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

  • 测试产品已添加到iTunes connect
  • 该产品的捆绑包id与应用程序捆绑包id匹配(且不使用通配符)
  • SKProductRequest中设置的产品标识符与iTunes connect上创建的产品匹配
  • 自从产品在iTunes connect上创建以来,我已经等了好几个小时了
  • 配置配置文件启用IAP
  • 遵循各种教程中的所有步骤,如等
  • 已从设备中删除应用程序,重新启动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);
    }
}

有时,对于这类问题,有非常有效的解决方案。在做了一些研究之后,我发现删除应用程序然后重新安装有时会有所帮助()还有你使用的是什么版本的iOS?

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

所以,如果你在苹果上创建了一个标识符为say的产品

com.yourcompany.product1

然后调用产品标识符为的产品请求

com.yourcompany.Product1

您的列表将返回零个产品

这让我忙了一会儿:-)


ps:在另一个项目中,我发现SKProductsRequest只在重新启动后才开始返回产品。因此,如果所有其他操作都失败,请尝试重新启动Mac。

我也遇到了同样的问题

我只需更改我的包标识符,它与 iTunes捆绑包标识符


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

我也遇到了同样的问题,解决方法是只发送IAP产品名称,而不是在产品名称之前发送我的捆绑id。以下是一个例子:

有效
SKProductsRequest*productRequest=[[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithObject:@“我的产品”]

而不是

不起作用
SKProductsRequest*productRequest=[[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithObject:@“com.my_site.my_app.my_product”]

确保在“功能”部分启用了“应用内购买”。否则,SKProductsRequest将返回0个产品

让我们转到iOS的设置>iTunes和应用商店注销


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

检查下面列表中的所有三件事
1) 检查您的产品标识符-它们必须与您的代码和iTunes Connect->My Apps->YourAppName->Features->in-Apps中的产品标识符完全相同 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)
        }

    }
}

还请询问您是否在iTunesConnect中设置了产品的价格。我错过了这一点,产品为零。我浪费了一整天的时间来解决这个问题。

此外,请记住,同意付费应用合同是不够的。您还必须填写该协议的联系人、银行和税务信息,特别是要考虑完成该协议。

经过大量挖掘,以下步骤解决了我为SKProductsRequest获取0个产品的问题


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

我在一些macOS 10.14系统上得到一个空的
SKProductsResponse.products
数组,而其他系统工作正常,并返回我的应用程序当前IAP的有效列表

相同的应用程序,相同的代码。
用户在两台计算机上登录相同的应用商店帐户


这太奇怪了。

在我的例子中,那是一个bug。在模拟器中,所有产品标识符都失败,并被标记为无效。在实际设备中,所有产品请求都成功获取了一个产品


TvOS 4K

在swift 5中,我面临着同样的问题,使Skproducts计数为0。我解决了这个问题
转到iTunes Connect->Agreements and Tax如果状态是新的,那么除了状态之外还应该有term view按钮单击它填写完整的表单,然后付费应用将显示状态为active,并且在xcode控制台中可以看到Skproducts计数。

即使在接受应用商店中的Tax and Agreements部分后,我也会遇到这个问题。我曾经多次更改我的应用程序包Id(用于向测试人员发送构建),我怀疑这可能是问题所在。因此,我修复了这个问题,如下所示。
转到
目标->构建设置->搜索“产品包标识符”
。它应该是
$(产品\u捆绑包\u标识符)

更新后,转到
常规->捆绑包标识符
。输入具有应用内购买功能的正确捆绑包Id。完成这些更改后,我可以列出产品

Swift 5 xcode 12.4模拟器返回的产品为零


正确使用物理设备返回产品

将您的代码与以下代码进行比较,这些代码对我来说很有用:谢谢,但我认为这不会是代码问题,因为到目前为止只有几行代码。我想你可以复制我的类,更改一些标识符,然后试着用它来购买吗?也许您的问题在于测试环境。我发布的代码实际上已经与代码的相关部分完全相同。需要考虑哪些环境因素?哪些因素