4.4 KiB
4.4 KiB
iOS IAP 商品拉取失败排查指南
问题现象
Products fetched successfully----------- undefined
products---------- []
常见原因和解决方案
1. ⚠️ App Store Connect 配置问题
检查商品状态
- 登录 App Store Connect
- 进入 我的 App → 选择你的应用
- 点击 功能 → App 内购买项目
- 确认以下商品存在且状态为 "准备提交" 或 "已批准":
coin_500coin_1000coin_2500coin_5000
商品类型必须是
- 消耗型项目 (Consumable) - 用于可重复购买的商品(如算力点数)
2. ⚠️ Bundle ID 不匹配
当前配置:
// app.config.js
bundleIdentifier: 'com.duomi.duooomi.ios'
必须确保:
- App Store Connect 中的 Bundle ID 与此完全一致
- 不能有大小写差异
- 不能有额外的后缀
3. ⚠️ 合约和税务未完成
在 App Store Connect → 协议、税务和银行业务:
- ✅ 付费 App 协议必须已签署
- ✅ 银行信息必须已填写
- ✅ 税务信息必须已完成
- ✅ 状态显示为绿色对勾
4. ⚠️ 测试环境配置
沙盒测试账户
- 前往 App Store Connect → 用户和访问 → 沙盒技术测试员
- 创建测试账户(不能使用真实 Apple ID)
- 在 iOS 设备上:
- 设置 → App Store → 沙盒账户
- 登录测试账户
设备配置
- 确保设备已登出真实 Apple ID(在沙盒测试环境下)
- 或使用 TestFlight 构建版本测试
5. ⚠️ 代码配置问题
商品类型错误
// ❌ 错误
fetchProducts({ skus: ['coin_500'], type: 'all' })
// ✅ 正确(消耗型商品)
fetchProducts({
skus: RECHARGE_OPTIONS.map(o => o.id),
type: 'in-app' // iOS 消耗型商品
})
6. ⚠️ 构建配置问题
必须使用正式构建
- ❌ Expo Go 不支持 IAP
- ❌ 本地开发构建可能无法连接 App Store
- ✅ 必须使用 Development Build 或 TestFlight 构建
构建命令
# 开发构建(支持 IAP)
bun run build:development:ios
# 或使用 TestFlight
bun run build:test:ios
7. ⚠️ Expo IAP 版本兼容性
检查版本
// package.json
"expo-iap": "^3.4.8"
确保依赖正确
bunx expo install expo-iap
调试步骤
1. 查看详细日志
useEffect(() => {
if (connected) {
console.log('🔍 Fetching SKUs:', skus)
fetchProducts({ skus, type: 'in-app' })
.then((result) => {
console.log('✅ Result:', result)
console.log('📦 Products:', result?.products)
console.log('📊 Count:', result?.products?.length)
})
.catch((error) => {
console.error('❌ Error:', error)
console.error('Code:', error?.code)
console.error('Message:', error?.message)
})
}
}, [connected])
2. 验证 SKU
在 App Store Connect 中复制准确的产品 ID,确保:
- 没有空格
- 大小写完全匹配
- 没有特殊字符
3. 测试单个商品
// 先测试单个已知存在的商品
fetchProducts({ skus: ['coin_500'], type: 'in-app' })
常见错误代码
| 错误码 | 含义 | 解决方法 |
|---|---|---|
undefined |
未连接到 App Store | 检查网络、沙盒账户 |
E_NOT_CONFIGURED |
IAP 未配置 | 完成合约和银行信息 |
E_UNKNOWN |
未知错误 | 检查 Bundle ID 和商品状态 |
[] (空数组) |
商品不存在 | 检查 SKU 和商品状态 |
快速检查清单
- App Store Connect 中商品状态为"准备提交"
- Bundle ID 完全匹配
- 合约、税务、银行信息已完成
- 使用沙盒测试账户登录
- 使用 Development Build 或 TestFlight
- SKU 名称完全正确(无空格、大小写匹配)
- 商品类型设置为"消耗型项目"
- 代码中
type: 'in-app'(不是 'all')
验证命令
# 重新构建并测试
bunx expo prebuild --clean
bun run build:development:ios
# 查看构建信息
eas build:list --platform ios