如何在RevenueCat中获取产品的trialDuration并动态展示试用时长
解决RevenueCat展示订阅试用时长的问题
核心实现步骤
你需要先从Offering中筛选出目标年度订阅的Package,再提取试用周期并格式化为用户易懂的本地化文本,具体代码如下:
代码示例
- 定位年度订阅Package
从已获取的offering中筛选出年度订阅对应的Package,可通过产品ID或订阅周期两种方式判断:
// 方式1:通过产品ID筛选(替换为你的年度订阅产品ID) let annualProductId = "com.your.app.annual.subscription" if let offering = offering, let annualPackage = offering.packages.first(where: { $0.product.productIdentifier == annualProductId }) { handleTrialDuration(for: annualPackage) } // 方式2:通过订阅周期筛选(无需硬编码产品ID) if let offering = offering, let annualPackage = offering.packages.first(where: { $0.product.subscriptionPeriod?.unit == .year && $0.product.subscriptionPeriod?.numberOfUnits == 1 }) { handleTrialDuration(for: annualPackage) }
- 提取并格式化试用时长
编写方法将订阅周期对象转换为本地化文本,展示到标签上:
private func handleTrialDuration(for package: Package) { guard let trialPeriod = package.freeTrialPeriod else { // 无免费试用时的文案 trialLabel.text = "无免费试用" return } let localizedTrialText = formatSubscriptionPeriod(trialPeriod) trialLabel.text = "免费试用:\(localizedTrialText)" } private func formatSubscriptionPeriod(_ period: SKProductSubscriptionPeriod) -> String { let unitString: String let unitCount = period.numberOfUnits switch period.unit { case .day: unitString = unitCount == 1 ? "天" : "天" case .week: unitString = unitCount == 1 ? "周" : "周" case .month: unitString = unitCount == 1 ? "个月" : "个月" case .year: unitString = unitCount == 1 ? "年" : "年" @unknown default: unitString = "" } return "\(unitCount)\(unitString)" }
关键说明
Package.freeTrialPeriod仅在产品配置了免费试用时才有值,无试用时需处理空值场景- 格式化方法会根据周期单位和数量生成自然的本地化文本,适配单复数表述
内容的提问来源于stack exchange,提问作者Mc.Lover
相关产品推荐
相关产品推荐

