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

如何在StoreKit 2中显示年度订阅月度价格并测试多区域?

在StoreKit 2中实现订阅月度价格的本地化显示及多Locale测试

一、生成带本地化货币符号的月度价格

StoreKit 2的Product类虽未直接提供拆分订阅周期价格的API,但可通过NumberFormatter结合产品自带的priceLocale,实现和displayPrice一致的本地化格式:

  1. 计算拆分后的月度价格(年度订阅除以12,半年订阅除以6)
  2. 用NumberFormatter配置货币格式,复用产品的priceLocale保证地区格式一致性
  3. 将计算后的价格转为格式化字符串

示例代码:

// 假设已有一个年度订阅产品实例
let annualSubscription: Product = ...

// 计算月度价格(用Decimal类型避免精度丢失)
let monthlyPrice = annualSubscription.price / Decimal(12)

// 配置价格格式化器
let priceFormatter = NumberFormatter()
priceFormatter.numberStyle = .currency
priceFormatter.locale = annualSubscription.priceLocale // 复用产品的地区信息,和displayPrice格式统一

// 生成最终可用于UI展示的字符串
if let formattedMonthlyPrice = priceFormatter.string(from: monthlyPrice as NSDecimalNumber) {
    print("月度订阅价:\(formattedMonthlyPrice)")
}

这个逻辑和StoreKit 1中SKProduct的处理思路一致,都是依赖系统本地化格式化能力,只是StoreKit 2把相关属性封装在了Product类内。

二、测试不同Locales下的价格显示

1. 模拟器手动切换地区

直接在iOS模拟器的「设置」→「通用」→「语言与地区」中切换目标地区(比如美国、德国、中国),重启APP后即可查看对应地区的货币符号和价格格式是否正确。

2. 代码强制指定Locale测试

开发阶段可临时修改priceFormatter的locale属性,快速模拟不同地区的显示效果,无需频繁切换系统设置:

// 模拟日本地区(日元)
priceFormatter.locale = Locale(identifier: "ja_JP")
// 模拟英国地区(英镑)
priceFormatter.locale = Locale(identifier: "en_GB")

3. StoreKit测试框架验证

使用Xcode的StoreKit测试功能,在测试用例中配置不同地区的测试产品,通过断言验证价格格式化后的字符串是否符合预期,确保上线后多地区显示无问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:30:14