Non-Consumable In-App Purchase构建版本审核被拒问题咨询
非消耗型内购审核被拒+SKErrorDomain Code=0 问题排查方案
你遇到的Error Domain=SKErrorDomain Code=0 "Cannot connect to iTunes Store"错误属于StoreKit的通用未知错误,结合「自有沙箱测试号正常、真实Apple ID沙箱测试异常、审核被拒」的表现,按以下优先级排查:
1. 开发者后台配置排查
- 确认2个非消耗型内购项目的状态为已批准,若处于「准备提交」状态,仅你自己创建的沙箱测试账号可访问,真实Apple ID、苹果审核测试账号均无法拉取到商品信息,直接触发报错
- 确认App的Bundle ID、Xcode打包使用的签名证书与开发者后台配置完全一致,不存在错配
- 确认你没有在代码中添加自定义的沙箱账号校验逻辑,比如仅允许指定范围的沙箱账号发起支付,会直接拦截苹果审核账号的请求
- 确认测试用的真实Apple ID没有被加入App Store Connect沙箱访问的黑名单
2. 内购代码逻辑排查
- 确保发起支付前,先通过
SKProductsRequest拉取官方返回的合法SKProduct对象,再创建支付请求,禁止硬编码商品ID直接生成支付对象 - 支付流程前必须先校验
SKPaymentQueue.canMakePayments()返回值为true,再发起后续请求,避免用户未登录App Store账号时触发异常 - 确认应用内提供了「恢复购买」功能入口,苹果强制要求非消耗型内购必须支持购买恢复,缺失该功能会直接被驳回
- 移除所有仅针对自有沙箱测试号的特殊兼容逻辑(比如模拟支付、跳过校验的分支),这类逻辑会导致苹果审核账号触发报错
- 你在
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction])回调中拿到该错误时,优先判断请求发起前的账号状态和商品拉取结果,该错误绝大多数情况由前置步骤异常导致,和回调逻辑本身无关
3. 测试与重新提审操作
- 真实Apple ID沙箱测试流程修正:先退出系统设置中已登录的正式App Store账号,打开应用触发内购时,在弹出的登录框输入账号并选择沙箱环境登录,不要提前在系统设置中登录真实ID访问沙箱环境
- 重新提交审核时,在「审核信息」栏主动提供可用的沙箱测试账号、密码,备注内购功能的操作路径,降低审核人员误操作概率
- 若所有配置校验无误仍存在异常,可以删除现有内购项目,重新创建一套相同productID的非消耗型内购项目,等待状态变为已批准后重新打包提交,部分情况是苹果后台配置缓存异常导致的问题
内容的提问来源于stack exchange,提问作者Codetard
相关产品推荐
相关产品推荐

