iOS / iPhone:在应用程序处于“拒绝”状态时应用程序内购买沙箱损坏?

(参见下面的MAIN THRUST跳到我问题的主旨。)

我的iOS应用程序在Apple审核流程中被拒绝,原因很简单,很容易解决。

但是,我想给新版本进行一次性测试,包括重新测试我们的应用程序内购买(应用程序中只有一个可购买的项目)。

现在,在初次检索产品信息时应用程序崩溃了。 它之前从未以这种方式崩溃,并且自从我们多次成功测试沙盒模式下的应用程序内购买后代码没有改变。 (事实上​​,在最初提交的版本与此版本之间没有任何代码更改,但是修复只是一个info.plist设置更改。)

更复杂的是,我使用Airplay / Marmalade SDK构建应用程序,并使用自己的API和回调机制包装Objective C调用和回调机制。 但是,这个包装器非常薄,所以我希望/相信这是一个普通的iOS /应用内购买问题,而不是特定于Marmalade的东西。

所以,正如我所说的那样,它在我用Marmalade调用检索产品信息和调用我的(C ++)回调的时间之间崩溃了。 (即,在Marmalade在SKProductsRequest对象上调用[productsRequest start]的时间和调用时间productsRequest:didReceiveResponse()并且Marmalade依次调用我的时间之间。)

主要推动我的问题:

我的应用程序在iTunesConnect上处于“已拒绝”状态。 此外,当我在iTunesConnect中查看应用程序内购买项目时,它也被标记为“已拒绝”。 但是,我已经在审核过程中讨论了我与Apple的应用内购买,我相信应用内购买本身对他们来说很好,唯一剩下的问题是我已经发现的小问题修复(这是他们的拒绝细节所说的:只有那一项)。

所以:我需要了解,当我的应用程序(及其相关的应用程序内购买)处于此“拒绝”状态,等待我从我那里获得新的二进制文件时,重新测试应用程序内部是否很棘手(或者可能不可能)购买,我最好的行动方案就是重新提交带有次要修复的应用程序并且相信(因为它是在正常测试期间当事情不处于被拒绝状态时工作的相同代码)应用程序的状态一旦Apple重置所有内容以测试新的二进制文件,购买将自行完成。

或者在这一点上我应该做些什么不同的事情让我可以重新测试应用内购买?

我想在iTunesConnect通信中询问Apple,但我不想引入它们的任何复杂性,因为到目前为止审查过程非常快速和有效。

我得到了Apple技术支持的回复:

我正在回答您关于应用购买的问题以及产品预检流程现在失败的问题。 Tech Note 2259 – “将应用内购买添加到您的iOS应用程序”中记录了此问题的答案。 http://developer.apple.com/library/ios/#technotes/tn2259/_index.html

在FAQ部分中,列出了此问题的原因列表

为什么我的产品标识符在invalidProductIdentifiers数组中返回? 由于以下一个或多个原因,您的产品标识符可能会在invalidProductIdentifiers数组中返回:

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

请注意最后一个原因 – 适用于您的情况。 解决方案是 – 当您要测试应用程序时,您需要“临时”将应用程序的副本上载到iTunesConnect,以便不再“拒绝”应用程序状态。 相反,它将处于“待审核”状态。 继续执行您需要的任何测试,然后假设应用程序仍然需要工作,自我拒绝应用程序,以便它不会到达应用程序审查。 在某些时候,您将拥有一个成品,您将最终正式提交申请。

在我的案例中,这种反应并不完全正确。 我收到了应用审核小组的单独回复。 简单地上传新二进制文件显然不会重置应用内购买项目的“被拒绝”状态。 显然他们必须自己手动重置(此时我相信他们和我都可以测试它)。 所以目前我已经上传了我的新二进制文件,但他们还没有重置应用内购买项目。

这个过程完成后我会在这篇文章中添加更多内容……