4

我正在尝试在我的 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 都显示在无效的打印输出中,并且没有一个显示在“产品信息:”打印输出中。

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

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

4

8 回答 8

6

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

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

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

于 2010-04-30T01:51:26.717 回答
4

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

于 2011-05-06T19:23:09.960 回答
3

请执行以下步骤:

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

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

  3. 检查流程部分中的请求合同和合同。

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

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

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

于 2011-08-23T11:00:44.537 回答
2

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

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

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

于 2012-02-22T11:39:51.763 回答
1

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

正要放弃整个过程,就在苹果开发者论坛看到了一个切题相关的帖子。它建议从测试设备中删除应用程序并进行全新的构建+安装。那成功了。

可以肯定的是,我在另一台给我带来同样麻烦的设备上尝试了它,它也在那里修复了它。

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

于 2011-01-09T00:56:35.437 回答
1

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

于 2011-01-24T02:17:59.330 回答
0

好的,所以在做了我可能想到的一切并阅读了那里的每个论坛之后,这就是有效的:

重做一切。

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

这就是让我的商店运转起来的原因。我最好的猜测是 Apple 后端服务器有时会搞砸,你只需要从头开始。

希望这对大家有帮助!

于 2009-10-31T00:19:22.143 回答
0

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

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

如果您没有事先编辑价格字段,那么当您按下保存时,旧版本的 UI 会报错。

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

于 2017-03-04T19:59:48.873 回答