我正在尝试在 iPhone 上测试应用内购买,但遇到了一个问题:我请求信息的产品 ID 最终在“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 都显示在无效的打印输出中,并且没有一个显示在“产品信息:”打印输出中。

任何建议将不胜感激...

附:是的,这是作为 Objective-c/c++ 构建的。

有帮助吗?

解决方案 7

好吧,在做了我能想到的所有事情并阅读了每个论坛之后,以下是有效的:

重做一切。

  1. 从 Xcode Organizer 中删除所有配置文件。
  2. 关闭 Xcode。
  3. 创建新的应用程序 ID。
  4. 使用新的应用程序 ID 创建新的配置文件。
  5. 使用新的应用程序 ID 创建新的分发配置文件。
  6. 在 iTunes Connect 中创建一个新应用程序
  7. 启动 Xcode,安装两个新的配置文件。更新 yoru 捆绑包 ID 以匹配。还要确保应用程序请求的 id 字符串已更新以反映您的捆绑包 id。
  8. 使用新的分发配置文件在分发模式下构建您的项目。
  9. 上传新的二进制文件。(不要拒绝)
  10. 设置您的测试应用内购买。
  11. 使用新的配置文件在调试模式下构建项目。
  12. 测试请求。

这就是我的商店正常运转所需要的。我最好的猜测是苹果后端服务器有时会搞砸,你只需要从头开始。

希望这对大家有帮助!

其他提示

我尝试了苹果论坛和此处建议的所有内容,但仍然无法正常工作。找到了解决方案 - 您的应用程序需要通过 Xcode 传输才能启用沙箱。

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

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

删除测试 iPhone 上的应用程序并重新安装它可以正常工作。另外,自从提交应用内购买项目以来,我也等了 8 个小时。

请执行以下步骤:

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

  2. 转到选项卡 - “合同、税务和银行业务”

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

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

  5. 当“iOS 付费应用程序”单元格移动到“有效合同”部分时,我将能够使用产品进行应用程序内购买。

请通过以下链接了解更多信息:http://developer.apple.com/library/ios/#technotes/tn2259/_index.html

请注意,当 iPhone 越狱后 应用同步 数据包中断 完全进行应用内购买测试。AppSync 使用 Install0us 作为依赖项进行安装。

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

在我删除 AppSync 之前,所有论坛、教程和有关修复“无效产品”的评论中的所有提示对我都不起作用。

我在使用新应用程序(v1.0 尚未在商店中发布)时也遇到了类似的问题,我也尝试在应用程序中添加购买功能。我设置了一切,添加了产品等。当我执行 SKProductsRequest 时,我的产品总是返回为无效。

当我在苹果开发者论坛上看到一篇与此无关的帖子时,我正准备放弃整个过程。它建议从测试设备中删除该应用程序,然后进行全新的构建+安装。这就成功了。

为了确定这一点,我在另一台给我带来同样麻烦的设备上尝试了它,它也修复了该问题。

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

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

IAP 的 iTunes Connect 界面最近已更新,可能会导致无效:<产品 ID> 错误。

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

如果您没有事先编辑价格字段,旧版本的 UI 会在您按“保存”时抱怨。

很容易完全忽略此字段,并且任何通过任何 iOS 调用使用该产品 ID 获取信息的尝试都会导致 Invalid :< 产品 ID > 而不是告诉您它发现 < 产品 ID > 售价为 0 美元。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top