iPhone Store Kit返回无效的产品ID错误

时间:2009-10-27 19:18:31

标签: iphone in-app-purchase storekit

我正在尝试在我的iPhone上测试In App Purchases并遇到一个问题,我在那里请求的信息最终作为“didRecieveResponse”方法中的无效产品ID返回给我。

我有:

  • 创建了与此应用相关联的商店内商品。它的捆绑ID与其他所有内容相匹配。它已被清除出售并得到开发商的批准。
  • 确保我的新配置文件已启用商店应用购买并且具有完整的应用名称:“com.domain.appname”
  • 确保这是用于将应用程序签名到我的iPhone的配置文件。
  • 确保“com.domain.appname”是用于构建配置文件的应用ID。
  • 确保我的plist文件中使用“com.domain.appname”作为包标识符。

似乎一切都已到位,但我仍然将我的产品作为无效ID返回给我。

这是我正在使用的代码:


- (void)requestProductData {
   SKProductRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject: @"com.domain.appname.productid"]];
   request.delegate = self;
   [request start];
}

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
   NSArray *myProducts = response.products;
   NSArray *myInvalidProducts = response.invalidProductIdentifiers;

   for(int i = 1; i < myInvalidProducts.count; ++i)
   {
      std::cout <<"invalid product id = " << [[myInvalidProducts objectAtIndex:i] UTF8String] << std::endl;
   }

   for(int i = 0; i  < myProducts.count; ++i)
   {
      SKProduct * myProduct = [myProducts objectAtIndex:i];
      std::cout << "Product Info:"  << std::endl;
      std::cout << "\tlocalizedTitle         = "  << [[myProduct localizedTitle] UTF8String]  << std::endl;
      std::cout << "\tlocalizedDescription   = "  << [[myProduct localizedDescription] UTF8String]  << std::endl;
      std::cout << "\tproductIdentifier      = "  << [[myProduct productIdentifier] UTF8String]  << std::endl;
      std::cout << "\tprice                  = "  << [[myProduct price] doubleValue]  << std::endl;
      std::cout << "\tpriceLocale            = "  << [myProduct priceLocale]  << std::endl;
   }

   [request autorelease];
}

我的所有产品ID都显示在无效的打印输出中,并且没有一个显示在“产品信息:”打印输出中。

我们将非常感谢任何建议......

P.S。是的,这是作为Objective-c / c ++构建的。

8 个答案:

答案 0 :(得分:6)

我尝试了在Apple论坛和这里建议的所有内容,仍然无法让它工作。找到解决方案 - 您的应用需要通过Xcode传输才能启用沙箱。

明显,对吗?好吧,如果您正在使用现有帐户的更新,设备仍会将其视为App Store安装的应用程序。

删除它,然后再次传输。它现在应该工作:)

答案 1 :(得分:4)

在测试iPhone上删除应用并重新安装它有效。此外,自提交应用内购买项目以来,我也等了8个小时。

答案 2 :(得分:3)

请完成以下步骤:

  1. 使用您的开发者帐户(https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/wo/)登录iTunes connect。

  2. 转到标签 - “合同,税务和银行业务”

  3. 检查处理部分中的请求合同和合同。

  4. 查看“iOS付费应用程序”,并且需要设置联系信息,银行信息和税务信息。

  5. 当“iOS付费应用程序”单元格移至“合同效果”部分时,我将能够在应用程序购买中使用产品。

  6. 请浏览以下链接以获取更多信息: http://developer.apple.com/library/ios/#technotes/tn2259/_index.html

答案 3 :(得分:2)

请注意,当iPhone被越狱时, AppSync 数据包会完全破坏应用内购买测试。 AppSync随Install0us一起安装,作为依赖项。

您不必完全恢复iOS,只需在Cydia中卸载AppSync即可成功测试应用内购买

所有关于fixind'无效产品'的论坛,教程和评论的所有提示在我删除AppSync之前都不适合我。

答案 4 :(得分:1)

我在使用应用程序购买时尝试添加的新应用程序(v1.0尚未在商店中发布)遇到类似问题。我设置了所有内容,添加了产品等,当我进行SKProductsRequest时,我的产品总是无效。

当我在Apple开发者论坛上看到一篇与之相关的帖子时,我正打算放弃整个过程。它建议从测试设备中删除应用程序并进行全新的构建+安装。这就行了。

可以肯定的是,我在另一台给我带来同样麻烦的设备上试了一下,并在那里解决了它。

这只是一个猜测,但我认为如果设备上有一个构建版本,它是使用在添加IAP之前创建的配置文件创建的,则需要删除该版本并使用IAP添加新版本轮廓。 (也就是说,简单地替换应用程序就行不通。)

答案 5 :(得分:1)

如果你的代码没有错, 有时它返回无效的productId 只是因为,您可能需要超过10小时的时间来更改信息。生效。 或者,productId无效,因为您的设备上仍然存在错误,因此您可以再次尝试删除您的应用并重新构建它。 根据我的经验, 希望它会有所帮助。

答案 6 :(得分:0)

好的,所以在做了我能想到的所有内容并阅读每个论坛之后,这里有用了:

每次重做。

  1. 从Xcode管理器中删除所有配置文件。
  2. 关闭Xcode。
  3. 创建新的应用ID。
  4. 使用新的App ID创建新的Provisioning配置文件。
  5. 使用新的App ID创建新的Distribution Provisioning配置文件。
  6. 在iTunes Connect中创建新应用
  7. 启动Xcode,安装两个新的配置文件。更新yoru包ID以匹配。另外,请确保更新应用程序请求的id字符串以反映您的软件包ID。
  8. 使用新的Distribution Provisioning配置文件在分发模式下构建项目。
  9. 上传新的二进制文件。 (保持不被拒绝)
  10. 设置测试应用内购买。
  11. 使用新的Provisioning配置文件在Debug模式下构建项目。
  12. 测试请求。
  13. 这是让我的商店工作所需要的。我最好的猜测是苹果后端服务器有时会搞砸,你只需要从头开始。

    希望这有助于每个人!

答案 7 :(得分:0)

最近更新了IAP的iTunes Connect界面,可能导致无效:&lt;产品ID&gt;错误。

您现在可以在iTunes连接中添加IAP,而无需设置默认为0美元的价格,它可以让您保存该条目。

如果您未预先编辑价格字段,则在按下保存时会出现旧版本的UI。

很容易完全错过这个字段,任何通过任何iOS调用使用该产品ID获取信息的尝试都会导致无效:&lt;产品ID&gt;而不是告诉你它发现&lt;产品ID&gt;价格为0美元。

相关问题