iOS应用内购买:苹果审核员会在live或sandbox环境中进行测试吗?

29
我使用应用内支付销售游戏消耗品。 成功付款后,我将收据转发到我的后端,后端会使用iTunes付款后端验证收据。 这在沙盒环境中完美运行。
现在我提交了我的应用程序,以便由苹果团队批准并发布到App Store。当然,我确保我的后端将使用itune生产环境验证付款收据,因为我期望苹果团队在生产模式下测试应用程序。 然而,该应用程序被拒绝。我被告知我的消耗品购买不起作用(由于无效收据被我的后端拒绝)。查看我的日志后,我看到有3次购买尝试。我解码使用的收据,并且看到所有的收据都是“环境”=“Sandbox”。
这是否意味着苹果在沙盒模式下测试提交的应用程序?那太疯狂了!我应该允许在生产环境中使用沙盒付款吗?还有其他相关信息吗?
3个回答

46

Thomas,你一定要阅读苹果公司有关应用内购买的FAQ:https://developer.apple.com/library/content/technotes/tn2413/_index.html#//apple_ref/doc/uid/DTS40016228-CH1-RECEIPTURL

始终先使用生产环境的URL验证收据;如果您收到21007状态码,请继续使用沙盒环境的URL进行验证。采用此方法可确保您在应用程序在沙盒中测试或审核或在App Store上线期间无需在不同的URL之间切换。

所以,是的,他们有点疯狂。但是我们早就知道了,不是吗?


2
哇,谢谢你提供这个……我简直不敢相信我花了多少时间来调试代码。 - eirikrl
你知道在哪里可以找到一个实现了这个工作流的示例服务器端验证代码吗?我知道这有点难以找到,但我不想再浪费一周时间等待苹果审核。 - Julian Osorio
我已经成功实现了答案中描述的工作流程,但是我有一个问题。使用这种配置,如果我在生产应用程序中使用测试帐户,是否有可能通过黑客攻击该应用程序?谢谢。 - Julian Osorio
2
@JulianOsorio 应用程序上线后,苹果不再允许沙盒账户购买应用内购买,因此收据本身不会生成,所以是安全的。 - Chandan Shetty SP
它也可以在Obj C代码上实现。将您的沙盒收据发送到苹果的生产服务器。加入一个if条件if(status == 21007),如果是,则再次将收据发送到沙盒服务器,您将获得status = 0 - Vaibhav Saran
我只希望你们的服务器还没有上线,他们的测试数据不会影响到你们的生产数据。 - smndiaye

1

@Jan P的回答是正确的。如果您正在寻找一个简单的是/否答案,FAQ中的具体答案是:

在您的应用程序正在审核期间应使用沙盒。

(15)我应该使用什么url来验证我的收据? 在沙箱中测试您的应用程序时,请使用沙箱网址https://sandbox.itunes.apple.com/verifyReceipt并且在您的应用程序审核期间也要使用此网址。


1
除了使用计时器或向服务器发送ping之外,我们如何知道应用程序何时处于审核状态? - DrMickeyLauer
@DrMickeyLauer 唯一实现此目标的方法是重写您的逻辑,使其首先尝试 Production,然后再尝试 Sandbox。虽然荒谬但却是真的。更多详细信息请参见:https://developer.apple.com/library/archive/technotes/tn2413/_index.html#//apple_ref/doc/uid/DTS40016228-CH1-RECEIPTURL - Guven
好的。不过这并不适用于本地收据验证,对于离线应用程序来说,我仍然更喜欢本地收据验证。 - DrMickeyLauer

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接