SubscriptionState
iOS模块,简化对订阅跟踪的处理。
安装
CocoaPods
pod 'SubscriptionState'
使用
使用通知中心
import SubscriptionState
class MyCustomSubscriptionService {
private var observers: [NSObjectProtocol]!
var isPremium: Bool = false {
didSet {
// TODO notify others
}
}
deinit {
observers.forEach { NotificationCenter.default.removeObserver($0) }
}
init() {
func updateState() {
self.isPremium = SubscriptionState.shared.isSubscriptionActive()
}
observers = [
NotificationCenter.default.addObserver(forName: .subscriptionSomeStateDidChange,
object: SubscriptionState.shared, queue: .main) { (notification) in
//let changedProductIdentifiers = notification.userInfo?[SubscriptionState.subscriptionSomeStateDidChangeProductsKey] as? [String]
updateState()
},
NotificationCenter.default.addObserver(forName: .subscriptionTotalStateDidChange,
object: SubscriptionState.shared, queue: .main) { (_) in
updateState()
}
]
updateState()
}
}
使用观察者模式
import SubscriptionState
class MyCustomSubscriptionService: NSObject, SubscriptionStateObserver {
private var observers: [NSObjectProtocol]!
var isPremium: Bool = false {
didSet {
// TODO notify others
}
}
deinit {
SubscriptionState.shared.removeObserver(self)
}
override init() {
super.init()
SubscriptionState.shared.addObserver(self)
updateState()
}
// MARK: - Helpers
func updateState() {
self.isPremium = SubscriptionState.shared.isSubscriptionActive()
}
// MARK: - SubscriptionStateObserver
func subscriptionStateDidChangeTotalState(_ subscriptionState: SubscriptionState) {
updateState()
}
func subscriptionStateDidChangeSomeState(_ subscriptionState: SubscriptionState) {
// TODO
}
}
检查指定产品列表的订阅状态
let active = SubscriptionState.isSubscriptionActive(["product1", "product2"])
宽限期间
您可以在购买过期日期后添加一些时间间隔,将其视为活跃。
SubscriptionState.shared.graceTimeInterval = 3600
上面的示例定义了3600秒。它将额外一个小时添加到过期日期。
终身购买
如果您的应用程序支持终身购买,则可以为它们添加跟踪。
SubscriptionState.shared.lifetimeProductIdentifiers = Set(['lifetimeProduct1'])
如果列表中至少购买了一个产品,则将订阅设置为活跃状态。
自定义日期解析器
您还可以设置自定义日期解析器回调。
SubscriptionState.shared.customDateResolver = { () -> Date in
...
}
它用于确定检查订阅活动时的实时日期。默认使用NTP服务。
持久化
订阅状态保存到钥匙串。因此,每次应用程序启动时都会恢复。
作者
- Сiarhei Ladzeika [email protected]
许可协议
请参阅许可协议