【问题标题】:Reasons for SKProductsRequest returning 0 products?SKProductsRequest 退回 0 件产品的原因?
【发布时间】:2014-02-19 02:07:19
【问题描述】:

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

  • 测试产品已添加到 iTunes 连接中
  • 产品的捆绑包 ID 与应用捆绑包 ID 匹配(并且未使用通配符)
  • 在 SKProductRequest 中设置的产品标识符与在 iTunes connect 上创建的产品相匹配
  • 自从在 iTunes connect 上创建产品后,我已经等了几个小时
  • 配置文件启用 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);
    }
}

【问题讨论】:

  • 将您的代码与以下对我有用的代码进行比较:github.com/wolf81/NewsHack/blob/master/FSProductStore.m
  • 谢谢,但我不相信这可能是代码问题,因为到目前为止只有几行。无论如何都在上面添加它们
  • 我认为您可以复制我的课程,更改一些标识符并尝试将其用于购买?也许你的问题是你测试的环境。
  • 我发布的代码实际上已经与您代码的相关部分相同。需要考虑哪些环境因素?
  • 连接到生产环境还是测试环境是您可能需要牢记的事情之一。

标签: ios in-app-purchase


【解决方案1】:

有时对于这些类型的问题有非常有效的解决方案。经过一番研究,我发现有时删除应用程序然后重新安装会有所帮助(In-App Purchase, SKProductsRequest returning 0 - Products still in Review) 另外你使用的是什么版本的 iOS?

【讨论】:

  • 谢谢,不过我已经试过几次了。它适用于 iOS7。我的产品状态是“等待屏幕截图”——这是根据 Apple 的 TN2259 技术说明关于测试 IAP 的应有状态。
【解决方案2】:

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

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

com.yourcompany.product1

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

com.yourcompany.Product1

您的列表将返回零产品。

这让我忙了一阵子:-)

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

【讨论】:

  • +1 不敢相信。这里没有一个解决方案对我有用,但重新启动 Mac。那行得通!也许重新启动 Xcode 项目就足够了。没有测试。
【解决方案3】:

我有同样的问题...

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

我的应用运行良好:)

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 完成了这项工作,顺便说一句,我使用的是 Ray Wenderlich 教程中的帮助类。
    【解决方案5】:

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

    【讨论】:

    • 这个简单的解决方案为我解决了问题!在沙箱中,我一切正常,没有迹象表明有任何问题,即使是优化的发布版本。但是应用商店版本在每次购买尝试时都会崩溃。
    【解决方案6】:

    让我们转到 iOS 的 设置 > iTunes 和应用商店,然后退出

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

    【讨论】:

      【解决方案7】:

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

      【讨论】:

      • 今天确认,确实“付费应用程序”合同必须有效,IAP 才能由 SKProductRequest 返回。如果合约处于待处理状态,则返回 [0]。
      • 所以如果没有填写银行和税务信息,即使在测试模式下也无法工作?
      • 在填写完税表并添加所有联系人后为我工作。在它确实返回 0 之前。
      【解决方案8】:

      还请您是否在 iTunesConnect 中设置了产品价格。我错过了,产品为零。浪费了我一整天的时间来弄清楚这一点。

      【讨论】:

        【解决方案9】:

        另外,请记住,仅同意付费应用程序合同是不够的。您还必须专门填写该协议的联系方式、银行和税务信息,才能被视为已完成。

        【讨论】:

          【解决方案10】:

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

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

          【讨论】:

            【解决方案11】:

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

            相同应用,相同代码。
            用户在两台机器上都登录了同一个 App Store 帐户

            这很奇怪。

            【讨论】:

              【解决方案12】:

              在我的情况下,这是一个错误。在模拟器中,所有产品标识符都失败并被标记为无效。在真实设备中,所有产品请求都成功获取了产品。

              TvOS 4K

              【讨论】:

                【解决方案13】:

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

                【讨论】:

                  【解决方案14】:

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

                  【讨论】:

                    【解决方案15】:

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

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

                    【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2015-02-12
                    • 2018-07-23
                    • 2018-06-12
                    • 2012-07-08
                    相关资源
                    最近更新 更多