订阅状态 1.1.0

SubscriptionState 1.1.0

Siarhei Ladzeika维护。



 
依赖
TrueTime>= 0
TPInAppReceipt>= 0
SwiftSelfAware>= 0
Valet>= 0
 

  • Siarhei Ladzeika

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服务。

持久化

订阅状态保存到钥匙串。因此,每次应用程序启动时都会恢复。

作者

许可协议

请参阅许可协议