37

我正在尝试在沙盒环境中测试应用内购买。

为了测试代码,我做了以下事情:

  1. 在 iTunes Connect 的“管理用户”下创建了一个应用内购买测试用户帐户

  2. 在“管理您的应用内购买”下创建了一些应用内购买产品。我对产品 ID 使用了数字值和字母数字值。

  3. 将应用程序加载到 iPhone 上,转到 Settings->Store 并退出常规商店并进入在步骤 1 中创建的测试帐户

  4. 在 (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response 回调中设置断点

所有提交的产品 ID 都在response.invalidProductIdentifiers属性中。提交请求时,我首先尝试了在步骤 2 中创建的确切产品 ID。我还尝试在它们前面加上 Bundle ID:

NSString *id2 = @"com.super.duper.8";
NSSet *productList = [NSSet setWithObjects:id2, @"8", nil];

SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers:productList];

我错过了一些明显的东西吗?任何帮助表示赞赏。

阿奇姆

4

22 回答 22

53

如果您仍然收到无效的产品 ID,我一直在积累所有各种原因的清单:

http://troybrant.net/blog/2010/01/invalid-product-ids/

于 2010-02-07T21:53:57.483 回答
15

我花了两天时间来处理我所有的 productsRequest(对于 AppID)最终都在 response.invalidProductIdentifiers 列表中,而不是在 response.products 列表中。Apple 在处理他们的 storekit 方面确实做得 F 级。它令人困惑、交织和复杂。

我终于解决了。正如论坛中少数人指出的那样,我学到的一个非常重要的教训是:您在 itunesconnect.apple.com 上输入的内容可能需要几个小时才能生效。

有两部分:您的 xcode 中的应用程序名称和 AppID 以及您在 itunesconnection 中输入的内容,它们必须完全匹配(区分大小写)。如果您注册或修改了您的应用内 AppleID(我还完成了我的所有合同和银行信息,正如一些人建议的那样,如果没有完成这部分,购买操作将无法正常工作),您不妨先去睡觉再测试一遍因为在我的情况下确实需要几个小时才能生效。在我 9 岁的孩子把我拖到睡前故事之前,我非常沮丧地与这个问题作斗争,然后惊讶地发现当我醒来时问题就消失了。

我发现 Eddy71 在http://www.iphonedevsdk.com/forum/iphone-sdk-development/21035-problems-creating-test-user-app-purchase.html中的建议真的很有帮助。在解决它之前,我在 Eddy 的检查清单中做了所有我可能做的事情,但仍然得到零个产品,我担心的一个问题是,如果不上传二进制代码来完成在 itunesconnect 中的应用程序注册是否可以(不需要按照所教的那样上线http://blog.mugunthkumar.com/coding/iphone-tutorial-%E2%80%93-in-app-purchases/)。确实没问题。确保选中“已批准出售”并且图标为绿色(填写表格后您需要一个额外的步骤来批准它)。另一个担心是我是否可以在调试模式下使用开发人员临时(不是分发临时),它也确实可以。我希望这可以帮助你们中的一些人。祝你好运,有信心。它最终会起作用。

于 2010-01-23T13:47:40.317 回答
9

我们的问题是 Apple 常见问题解答中的最后一个要点,“为什么我的产品标识符会在invalidProductIdentifiers数组中返回? ”:

  • 您没有完成所有财务要求(请参阅本文档的“合同、税务和银行信息”部分)。
  • 您没有使用明确的 App ID。
  • 您没有使用与您的显式 App ID 关联的 Provisioning Profile。
  • 您没有在代码中使用正确的产品标识符。有关产品标识符的更多信息,请参阅技术问答、QA1329、“应用内购买产品标识符”。
  • 您没有清除在 iTunes Connect 中出售的应用内购买产品。
  • 您可能已经修改了您的产品,但这些更改尚不适用于所有 App Store 服务器。
  • 如果您或 App Review 在 iTunes Connect 中拒绝了您最近的二进制文件。

我通过单击 iTunes Connect 中的“准备上传二进制文件”将最新版本(已被拒绝)更改为“等待上传”,大约 10 分钟后问题得到解决。

于 2011-12-08T01:18:35.780 回答
5

手机越狱就OK了,你只需要在Cydia中卸载appSync就可以了

于 2012-04-08T20:19:27.550 回答
4

Apple 有一个很棒的文档,它在最后涵盖了这一点,但鲜为人知。它还消除了一些关于无用的神话(例如提交二进制文件)。

Technote 2259“将应用内购买添加到您的 iOS 和 Mac 应用程序”

于 2012-05-17T19:27:03.940 回答
3

尝试重置 iphone 设置并从 iphone 中删除应用程序并直接使用请求产品 ID 而不使用 Bundle ID

于 2011-04-18T07:10:21.790 回答
3

我们最终创建了一个新的配置文件,某处有一行(不记得在哪里,不在应用程序内购买的文档中)表明您必须在配置文件中启用应用程序内购买。我们现有的配置文件无法做到这一点,因此我们创建了一个新配置文件,然后我们可以启用它。

于 2009-10-08T22:51:22.417 回答
2

对于其他有这些问题的人,我强烈建议您阅读Apple 论坛上的此主题。

于 2009-10-30T06:50:52.943 回答
2

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

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

因此,从您的设备中删除该应用程序。然后使用 Build & Run 将应用程序重新安装到设备上,并将您的设备连接到 Mac。它现在应该可以工作了:)

于 2010-04-30T01:51:05.283 回答
2

就我而言,我没有填写银行信息、税务信息和联系信息。完成后,我可以获得我的产品 ID,希望这对某人有所帮助。

于 2017-06-15T01:36:03.510 回答
1

@"8" 是干什么用的?您的产品名为 com.super.duper.8 对吗?

http://blog.mugunthkumar.com/coding/iphone-tutorial-%e2%80%93-in-app-purchases/

于 2009-10-21T02:14:13.190 回答
1

这是你出错的地方,你需要在你的代码中:

NSSet *productList = [NSSet setWithObjects:product id]

您可以从 iTunes connect 获取此产品 ID。

并且您需要确保您已经创建了一个测试用户,并且已经退出了您原来的 iTunes 帐户。请参阅不要使用测试用户帐户登录,不管苹果文档说什么,只要在出现弹出窗口时使用它。

于 2009-07-17T16:09:38.363 回答
1

我已经尝试了互联网上可用的所有解决方案,但没有任何效果,绝对没有。我的问题:我的设备已经越狱并且上面有 Cydia。我将设备恢复为出厂默认设置(未越狱),它第一次工作并返回产品 ID 没有问题。

于 2011-04-28T21:30:32.537 回答
1

我遇到的另一个问题是我必须在 Xcode 中转到 Window > Organizer 并删除我的应用程序和配置文件并重新添加我的开发配置文件。我重新启动了设备和 xcode 作为额外的措施。

于 2010-11-11T20:52:52.413 回答
1

对我来说,问题是我在设置应用内购买时选择了“打开内容托管”。所以我不得不把它关掉,问题就解决了。

于 2016-11-05T03:50:51.607 回答
0

代替:

NSSet *productList = [NSSet setWithObjects:id2, @"8", nil];

和:

NSSet *productList = [NSSet setWithObjects:@"8", nil];
于 2013-05-29T06:43:06.817 回答
0

商店需要一些时间才能将产品提供给所有服务器(请参阅文档)。因此,在 iTunes Connect 中创建产品和在设备上测试时将该产品 ID 视为有效 ID 之间,您可能会遇到延迟。对我来说,我的产品出现大约需要 12 个小时。

于 2009-10-22T06:57:11.397 回答
0

给其他人的注意事项:不要将 NSMutableSet 用于产品 ID。它必须是一个 NSSet!

于 2010-03-21T21:36:31.897 回答
0

如果您想保留应用数据,但又想尝试删除应用以解决此问题,请先同步您的设备。然后删除您的应用程序并从 Xcode 重新安装——这为我解决了这个问题。一旦它开始工作,您就可以从备份中恢复您的设备——这只需要几分钟,并且产品请求在恢复后仍然有效。

于 2011-01-17T00:33:37.937 回答
0

不完全确定为什么,但是当我将请求的产品 ID 从“com.mycompany.myapp.product”更改为“产品”时,它开始工作。也许是因为我在 iTunes Connect 中配置产品的方式。

试一试,可能对你们中的一些人有用...

于 2011-12-01T14:12:24.057 回答
0

可能是另一个问题。如果您的 xCode 项目的名称不是用英文书写的,或者其中包含其他字符,则 bundle ID 将在您的应用程序名称所在的位置带有“------”。我认为这只是捆绑 ID 的约定,在 xCode 中有这个。原来,这是我的问题,所以用英文命名你的 xCode 项目)我知道大多数情况下不是这样,但无论如何)

于 2015-02-27T08:45:29.977 回答
0

我尝试了每个人都在谈论的一切。我最终创建了一个访客帐户,以查看是否可以找到产品 ID.... 是的。所以然后我开始退出活动监视器中的所有内容并发现了问题。我不得不退出下面的“商店”进程。突然间,我不再获得无效的产品 ID。希望能帮助那里的人。

如果您收到无效的产品 ID 空错误,请退出这些

于 2015-12-17T09:50:01.190 回答