iOS内购触发ASDErrorDomain Code=500异常 未上架能否测试内购
iOS内购测试问题排查方案
核心问题结论
不需要将应用上传至TestFlight才能测试内购功能,Xcode直接安装到测试设备的沙箱环境完全支持内购测试。
报错原因分析
你遇到的AMSServerErrorDomain Code=-5000、Authentication Failed报错是沙箱内购的常见错误,通常由以下原因导致:
- 使用普通Apple ID而非专属沙箱测试账号进行内购验证
- 提前在系统设置中登录了沙箱测试账号,而非在内购弹窗触发时输入账号密码
- App Store Connect中创建的内购商品状态异常,未处于「准备提交」状态
- 项目未配置内购权限,或Bundle ID、商品ID与App Store Connect后台配置不匹配
代码问题修复
你的StoreManager代码存在核心逻辑缺失,这是输入账号密码后UI无响应的直接原因:
你只实现了SKProductsRequestDelegate协议,但未实现SKPaymentTransactionObserver协议,也没有将自身添加为支付队列的观察者,导致支付状态变更时系统无法回调你的状态处理方法,transactionState不会更新,UI自然无响应。
需要修改代码如下:
- 调整类声明,添加
SKPaymentTransactionObserver协议
class StoreManager: NSObject, ObservableObject, SKProductsRequestDelegate, SKPaymentTransactionObserver {
- 添加init方法,注册支付队列观察者
override init() { super.init() SKPaymentQueue.default().add(self) }
- 添加deinit方法,移除观察者避免内存泄漏
deinit { SKPaymentQueue.default().remove(self) }
本地测试操作步骤
- 进入App Store Connect后台,在「用户和访问-沙箱-测试员」路径下创建专属沙箱测试账号,不需要真实邮箱,密码符合规则即可
- 退出测试设备系统设置中当前登录的Apple ID,不要提前登录沙箱账号
- 确认Xcode项目的Signing&Capabilities中已添加In-App Purchase能力,Bundle ID、内购商品ID与后台配置完全一致,内购商品状态为「准备提交」
- Xcode直接安装应用到测试设备,触发内购时在弹出的登录框输入沙箱测试账号的账号密码即可完成测试
如果沙箱环境偶发不稳定,也可以选择上传TestFlight测试,但这不是内购测试的必要前提。
内容的提问来源于stack exchange,提问作者user16837615
相关产品推荐
相关产品推荐

