iOS在应用购买收据验证 - 沙盒与生产网址?

时间:2014-02-02 07:12:18

标签: ios validation in-app-purchase sandbox

我跟着Ray Wenderlich's tutorial在我的应用中实施收据验证。代码直接从我的应用程序连接到Apple的验证服务器,而不是通过我自己的服务器。

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

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

3 个答案:

答案 0 :(得分:10)

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

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

但是没有什么能阻止你分两步进行验证:

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

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

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

答案 1 :(得分:5)

请务必先使用生产网址验证收据;如果您收到21007状态代码,请继续使用沙箱URL进行验证。遵循此方法可确保您在沙盒中测试或查看应用程序时,不必在URL之间切换,也不必在App Store中进行切换。

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

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

答案 2 :(得分:1)

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

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

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