You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

订阅型内购Sandbox环境价格、Locale异常及旧价格显示问题求助

沙箱环境StoreKit获取旧订阅价格问题解决

问题描述

使用SKProductsRequest(productIdentifiers: productIdentifiers)从App Store Connect拉取产品信息时,沙箱环境(TestFlight、Xcode直接运行、App Center测试)中返回的订阅原价不正确:

  • 已在App Store Connect将订阅新用户价格设置为$5.99/月,introductory offer为$1.99/月(前6个月)
  • StoreKit返回的introductory offer正确,但原价始终是旧的$3.99
  • 生产环境显示正常,购买弹窗也同步显示错误的旧价格

已尝试操作

  • 查阅技术社区,有反馈称这是Apple的沙箱缓存问题,但无法确认自身操作是否有误
  • 按照Xcode官方文档创建synced StoreKit configuration file,问题依旧
  • 修改模拟器位置设置,始终返回US locale
  • 多次测试购买流程,弹窗价格无变化

解决方案

1. 等待沙箱缓存同步

Apple沙箱服务器的价格缓存更新存在滞后性,尤其是订阅价格变更后,通常需要24-48小时才能完成同步,部分情况下可能需要更久。如果刚修改完价格,优先等待一段时间再测试。

2. 重置沙箱测试账号

沙箱测试账号可能缓存了旧价格数据,操作步骤:

  • 登录App Store Connect,进入「用户和访问」>「沙箱测试员」
  • 删除当前使用的测试账号,重新创建一个全新的测试账号
  • 用新账号在设备/模拟器上登录App Store(设置>App Store>退出当前账号,登录新沙箱账号),重新测试

3. 重新同步StoreKit配置文件

如果使用了同步的StoreKit配置文件:

  • 在Xcode中执行菜单:Product > StoreKit > Sync with App Store Connect
  • 清理项目缓存:按Cmd+Shift+K,然后重新编译运行项目

4. 强制刷新设备/模拟器区域设置

区域设置异常可能导致价格显示不符合预期:

  • 模拟器:进入「设置>通用>语言与地区」,选择目标地区(如美国),重启模拟器后再测试
  • 真机:修改地区设置后,重启App或设备,确保区域设置生效
  • 代码中可临时指定Locale验证价格显示(正式环境请勿硬编码):
    let priceFormatter = NumberFormatter()
    priceFormatter.numberStyle = .currency
    priceFormatter.locale = product.priceLocale // 始终依赖产品返回的locale,不要硬编码
    let displayPrice = priceFormatter.string(from: product.price)
    

5. 确认App Store Connect价格状态

检查App Store Connect中的价格设置:

  • 确认价格层级的变更已提交并通过审核(即使生产环境已生效,沙箱可能延迟同步)
  • 检查是否存在未发布的价格变更,确保所有修改都已发布

生产环境保障

  • 生产环境的价格同步逻辑更稳定,只要App Store Connect中的价格设置已审核通过并生效,生产环境会返回正确价格
  • 发布前务必使用全新的沙箱测试账号再次验证价格,确认无误后再提交生产版本
  • 代码中禁止硬编码价格,始终通过SKProduct的price和priceLocale属性获取并格式化价格,避免本地缓存旧数据

内容的提问来源于stack exchange,提问作者Shawn Frank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 09:02:33