我正在尝试动态显示我的年度产品的试用时长。我在RC框架中找到了
trialDuration
,但我不知道如何使用它。我收到这样的产品:
private var offering: Offering? = SubscriptionManager.shared.offerings?.current
然后需要访问试用持续时间以通过文本标签显示它。比如获得
localizedPriceString
产品价格。
任何帮助都会很棒!
我使用的是 sk1Discount,它是 StoreProductDiscount 类型的一部分。
例如使用以下代码片段:
if let introductoryDiscount = package.storeProduct.introductoryDiscount {
if let offer = introductoryDiscount.sk1Discount,
introductoryDiscount.paymentMode == .freeTrial {
Text("\(offer.subscriptionPeriod.numberOfUnits) \(offer.subscriptionPeriod.numberOfUnits > 1 ? offer.subscriptionPeriod.unit.localizedPluralString : offer.subscriptionPeriod.unit.localizedString) for free!")
}
}
希望对您有帮助。注意:我经历过 sk1Discount 有时在调试模式下为空,但我在生产中从未遇到过任何问题。
RevenueCat SDK v4.21.1+
为方便起见,每个
localizedPriceString
对象都提供 Package
属性,并且在 Apple 的 App Store 上,免费试用作为 介绍性优惠提供。
您还可以使用 StoreKit 的底层 storeProduct 创建自己的
trialDuration
属性。
let discount = package.storeProduct.introductoryDiscount
这是一个返回试用期的自定义字符串表示形式的实现:
var introOfferDuration: String? {
guard let discount = package.storeProduct.introductoryDiscount else {
return nil
}
return discount.price == 0
? "\(discount.subscriptionPeriod.periodTitle()) for free"
: "\(package.localizedIntroductoryPriceString!) for \(discount.subscriptionPeriod.periodTitle())"
}
// MARK: - RevenueCat SDK
extension SubscriptionPeriod {
var durationTitle: String {
switch self.unit {
case .day: return "day"
case .week: return "week"
case .month: return "month"
case .year: return "year"
}
}
func periodTitle() -> String {
let periodString = "\(self.value) \(self.durationTitle)"
let pluralized = self.value > 1 ? periodString + "s" : periodString
return unit == .week ? "\(self.value * 7) days" : pluralized
}
}