gpt4 book ai didi

iOS 应用内购买订阅从 SKProduct 获得免费试用期长度

转载 作者:技术小花猫 更新时间:2023-10-29 11:02:51 27 4
gpt4 key购买 nike

我正在处理带有订阅的应用内购买。很快,您可以像这样从 SKProduct 获取价格和价格区域设置:

weeklyProduct.price.doubleValue  
weeklyProduct.priceLocale.currencySymbol

其中 weeklyProduct 是 SKProduct。

是否可以获得免费试用期?例如,我为产品指定了两周的免费试用期。我可以从 SKProduct 得到这个吗?

最佳答案

我已经使用 DateComponentsFormatter 解决了这个问题,这为您节省了大量时间来本地化不同的语言以及处理复数等等。这可能看起来像很多代码,但我希望它能在未来节省我的时间。

import Foundation

class PeriodFormatter {
static var componentFormatter: DateComponentsFormatter {
let formatter = DateComponentsFormatter()
formatter.maximumUnitCount = 1
formatter.unitsStyle = .full
formatter.zeroFormattingBehavior = .dropAll
return formatter
}

static func format(unit: NSCalendar.Unit, numberOfUnits: Int) -> String? {
var dateComponents = DateComponents()
dateComponents.calendar = Calendar.current
componentFormatter.allowedUnits = [unit]
switch unit {
case .day:
dateComponents.setValue(numberOfUnits, for: .day)
case .weekOfMonth:
dateComponents.setValue(numberOfUnits, for: .weekOfMonth)
case .month:
dateComponents.setValue(numberOfUnits, for: .month)
case .year:
dateComponents.setValue(numberOfUnits, for: .year)
default:
return nil
}

return componentFormatter.string(from: dateComponents)
}
}

需要将SKProduct周期单位转换为NSCalendarUnit

import StoreKit

@available(iOS 11.2, *)
extension SKProduct.PeriodUnit {
func toCalendarUnit() -> NSCalendar.Unit {
switch self {
case .day:
return .day
case .month:
return .month
case .week:
return .weekOfMonth
case .year:
return .year
@unknown default:
debugPrint("Unknown period unit")
}
return .day
}
}

您可以像这样从 SubscriptionPeriod 中调用它:

import StoreKit

@available(iOS 11.2, *)
extension SKProductSubscriptionPeriod {
func localizedPeriod() -> String? {
return PeriodFormatter.format(unit: unit.toCalendarUnit(), numberOfUnits: numberOfUnits)
}
}

您可以像这样依次从 SKProductDiscount 调用它。请注意,我暂时没有实现其他付款方式。

import StoreKit

@available(iOS 11.2, *)
extension SKProductDiscount {
func localizedDiscount() -> String? {
switch paymentMode {
case PaymentMode.freeTrial:
return "Free trial for \(subscriptionPeriod.localizedPeriod() ?? "a period")"
default:
return nil
}
}
}

关于iOS 应用内购买订阅从 SKProduct 获得免费试用期长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45825091/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com