You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

应用内购测试正常但App Store审核被拒问题求助

解决App Store内购审核因Guideline 2.1被拒的问题

我太懂这种测试全过、审核翻车的憋屈了——用测试账号测内购一切顺畅,结果提交审核就栽在收据验证上。核心问题其实很明确:你的生产服务器没处理好「带生产签名的App从Apple沙箱环境获取的收据」,毕竟审核团队是用沙箱环境测试内购的,而你的服务器大概率只对接了Apple的生产验证端点。

下面是Apple官方推荐的修复方案,照着调整就能解决这个问题:

1. 给服务器的收据验证逻辑加「动态环境切换」

Apple提供两个收据验证端点:

  • 生产环境:https://buy.itunes.apple.com/verifyReceipt
  • 沙箱环境:https://sandbox.itunes.apple.com/verifyReceipt

你需要让服务器遵循这个流程:

  • 先把用户提交的收据发送到生产验证端点
  • 如果返回的状态码是21007(这个码明确表示当前收据来自沙箱环境),立刻切换到沙箱端点重新发起验证
  • 其他状态码按正常逻辑处理(比如0代表验证成功,其他错误码对应处理失败场景)

2. 别再根据App构建类型硬编码验证环境

很多开发者会踩这个坑:Debug版本连沙箱端点,Release版本连生产端点。但审核时用的是Release签名的App,却在沙箱环境测内购,这时候硬编码的生产端点就会返回错误,直接导致验证失败。

正确的做法是完全抛弃「根据App环境选端点」的逻辑,只靠Apple返回的状态码来动态切换——这是Apple官方明确建议的方案,能覆盖所有场景。

3. 务必测试调整后的逻辑

改完服务器代码后,一定要验证这个流程:

  • 打一个Release包,用测试账号完成内购,拿到沙箱收据
  • 把这个收据发给你的生产服务器,确认它能正确识别21007状态码,并自动切换到沙箱端点完成验证
  • 同时也要测试正式生产收据的验证,确保正常购买流程不受影响

另外还要注意:发送给Apple的收据必须做Base64编码,请求体要符合Apple的要求(比如用JSON格式,包含receipt-data字段)。

内容的提问来源于stack exchange,提问作者Rahul Sharma

火山引擎 最新活动