iOS在应用购买收据validation – 沙盒与生产url?

我按照Ray Wenderlich的教程在我的应用程序中实现收据validation。 代码直接从我的应用程序连接到Apple的validation服务器,而不是通过我自己的服务器。

在我将第一个二进制文件提交到AppStore之后,我测试了我的应用程序并且应用内购买无效,因为我已将其从沙箱URL切换到生产URL。

当他们的AppStore评论员测试它并因此被拒绝时,这也会失败吗? 我已经阅读过这篇文章,但如果我不使用自己的服务器,我仍然很困惑这是否适用于我。

该解决方案非常简单,并且在WWDC 2012的会话308上进行了解释(该video可供注册开发人员使用)。 该会话与订阅相关,但您可以在应用内购买时将其扩展。

当您开发硬编码您的应用程序以使用沙箱validation收据时会发生什么。 然后,您发送应用程序进行审核,您清楚地对应用程序进行了硬编码,以便使用生产服务器validation收据。

但没有什么能阻止您分两步进行validation:

  • 始终首先使用生产服务器validation收据,这将适用于您的应用程序生命周期的99%。 如果确认收据,您就完成了。
  • 如果先前的validation失败,只需使用沙箱服务器validation收据。 这应该涵盖您的开发需求,当然假收据也将无法通过validation。

顺便说一句,这仅在订阅文档中正式声明,如果您尝试使用生产服务器validation沙盒收据,您将获得特定的状态代码; 还有另一个状态代码,涵盖了使用沙盒服务器validation的生产收据的情况。 在所有情况下,沙箱和生产这两个世界总是分开的。

不要忘记,iOS7添加了一种新的更安全的方式来直接从设备管理收据validation:实际上考虑直接来自客户端的收据validation(您没有完全控制,例如使用越狱设备)不如通过您控制的服务器完成收据validation。

始终首先使用生产URLvalidation收据; 如果您收到21007状态代码,请继续使用沙箱URL进行validation。 遵循此方法可确保您在沙盒中测试或查看应用程序时无需在URL之间切换,或者在App Store中进行实时更新。

注意:21007状态代码表示此收据是沙盒收据,但已将其发送到生产服务进行validation。

没有公共API可以调用以区分生产环境和沙箱环境,以便您可以提前决定使用哪个服务器。 如果您已实施建议的收据validation过程,则可以在与StoreKit服务器联系的服务器上实施此修复。 如果validation尝试的状态代码是21007,请在沙箱服务器上再次尝试。

它可能会失败。 我有一个应用程序购买的应用程序(但不是基于我的服务器,直苹果代码)在开发中工作,但一旦Apple发布崩溃。 它崩溃了,因为我没有在iTunes Connect中完成所有正确的步骤。

令人惊讶的是,审稿人没有抓住这一点,大概是因为他们也在沙盒环境中工作。

我不确定这会对你有所帮助,希望如此。