iOS应用内购问题:显示价格与App Store Connect所选价格档位不匹配
解决Expo内购价格与App Store Connect档位不匹配的问题
我之前用Expo EAS和expo-in-app-purchases集成可消耗内购时,碰到过几乎一模一样的问题!结合我的排查经验,给你几个方向去解决:
1. 检查App Store Connect的价格档位设置模式
首先要确认你在配置价格时,有没有混淆用户支付价和开发者所得价:
- 在App Store Connect设置内购价格时,有两种模式:一种是直接设置「用户需要支付的金额」,另一种是设置「开发者最终获得的金额」(系统会自动计算用户支付价,包含税费和苹果佣金)。
- 你提到的档位1设置€0.99但显示€1.09,看起来像是选了「开发者所得价」模式,系统自动加上德国增值税和佣金后,得出了用户实际支付的€1.09。而替代档位A可能刚好在两种模式下金额一致。
- 解决方法:进入App Store Connect的内购项目价格设置页面,切换到「用户支付价格」模式,重新选择对应档位。
2. 验证Sandbox测试账号的区域设置
Sandbox环境下的价格显示完全依赖测试账号的所属区域:
- 如果你的测试账号不是德国区的,StoreKit会返回该账号所在区域的对应价格,而非你设置的德国区价格。
- 解决方法:
- 退出当前App Store账号,登录德国区的Sandbox测试账号(确保账号注册时地区选的是德国)。
- 在设备的「设置」-「App Store」里,确认Apple ID的地区是德国。
3. 检查expo-in-app-purchases的API使用是否正确
确保你通过正确的字段获取价格:
- 使用
getProductsAsync获取产品列表后,应该读取localizedPrice字段显示给用户,这个字段是已经本地化并包含税费的最终价格。 - 如果你错误读取了
price字段(该字段是原始不含税价格,单位为美元),就会显示错误金额。 - 示例代码:
const { products } = await InAppPurchases.getProductsAsync(['your-product-id']); const displayPrice = products[0].localizedPrice; // 正确的本地化价格
4. 升级expo-in-app-purchases到最新版本
旧版本的库可能存在区域价格解析的bug:
- 部分早期版本的
expo-in-app-purchases在处理非美元区价格时,会出现计算错误。 - 解决方法:运行
expo install expo-in-app-purchases升级到最新稳定版,然后重新构建EAS包。
5. 确认价格档位的区域同步状态
有时候App Store Connect的价格更新需要时间同步到StoreKit服务器:
- 虽然你说Sandbox也有问题,但还是建议等待1-2小时,确保价格设置已经完全同步到所有环境。
- 可以在App Store Connect的「内购项目」页面,检查德国区的价格是否显示为你设置的金额,没有异常标记。
内容的提问来源于stack exchange,提问作者Maximilian Krause
相关产品推荐
相关产品推荐

