123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- //
- // KMCheckInManager.swift
- // PDF Reader Pro
- //
- // Created by User-Tangchao on 2025/1/2.
- //
- import Cocoa
- let kKMTrailCancelStateDidChange = Notification.Name("KMTrailCancelStateDidChangeNotificationName")
- @objcMembers class KMCheckInManager: NSObject {
- static let `default` = KMCheckInManager()
-
- // 试用退订
- var trailCancel = false {
- didSet {
- NotificationCenter.default.post(name: kKMTrailCancelStateDidChange, object: nil)
- }
- }
-
- private var timer_: Timer?
-
- func initLaunchData() {
- // 启动定时器 轮询签到
- var timeInterval: CGFloat = 60 * 60
- #if DEBUG
- timeInterval = 1 * 60
- #endif
- timer_ = Timer.scheduledTimer(withTimeInterval: timeInterval, repeats: true, block: { [weak self] timer in
- self?.checkIn(refreshData: true, callback: nil)
-
- self?.fetchCancelSubscribe(callback: nil)
- })
- }
-
- func checkIn(refreshData: Bool, callback: ((Any ...)->Void)?) {
- let member = KMMemberInfo.shared
- if member.isLogin == false {
- return
- }
- if member.is_advanced_year_subscribe() == false {
- return
- }
- if member.isCancelSubscribe() { // 已退订
- return
- }
- // 高级版年订阅
- if member.is_trailing() == false {
- return
- }
-
- let userEmail = member.userEmail
- if userEmail.isEmpty {
- return
- }
-
- if hasCheckInForToday(for: userEmail) { // 今天已经签到
- return
- }
-
- // 试用中 去签到
- KMMemberCenterManager.checkIn { success, resultModel, error in
- if success {
- if refreshData {
- // 刷新用户数据 [刷新试用天数]
- KMUserInfoVCModel().refreshUserInfo { success, msg,dic in
- if(success) {
- self.openCheckInWindow()
-
- callback?()
- } else {
- callback?()
- }
- }
- } else {
- self.openCheckInWindow()
-
- callback?()
- }
- } else {
- callback?()
-
- self.openCheckInWindow()
- }
- }
- }
-
- // 弹签到窗口
- func openCheckInWindow() {
- let member = KMMemberInfo.shared
- if member.isLogin == false {
- return
- }
-
- let userEmail = member.userEmail
- if userEmail.isEmpty {
- return
- }
-
- if hasCheckInForToday(for: userEmail) { // 今天已经签到
- return
- }
-
- // 弹签到窗口
- if KMCheckInWindowController.shared.needShow() {
- var dayNum: Int = 0
- for vip in KMMemberInfo.shared.activeVips {
- if vip.levels == "3" && vip.paymentModel == "1" && vip.cycle == 4 {
- dayNum = vip.trailDays
- break
- }
- }
- if dayNum == 1 || dayNum == 3 || dayNum == 7 {
- if fetchDayNumRecord(for: userEmail) != dayNum { // 最后记录的累积天数没有弹
- KMCheckInWindowController.shared.openWindow(num: dayNum)
- }
-
- saveRecord(dayNum: dayNum)
- }
- }
- }
-
- func advancedYearSubscribeTrailCancelForLocal() -> Bool {
- #if VERSION_FREE
- #if VERSION_DMG
- #else
- if KMMemberInfo.shared.isLogin {
- return false
- }
- let man = IAPProductsManager.default()
- if let model = IAPReceiptTool.fetchProductLastestReceipts(with: man?.receiptModel, withProductId: man?.fourDevicesAllAccessPackNew12months_lite?.product?.productIdentifier) {
- if model.is_trial_period { // 有试用过
- var cancelTrail = false
- for infoM in man?.receiptModel?.pendingRenewalInfoModels ?? [] {
- if model.product_id == infoM.product_id {
- cancelTrail = infoM.auto_renew_status == 0
- }
- }
- if cancelTrail { // 试用退订
- return true
- }
- }
- }
- #endif
- #endif
- return false
- }
-
- func fetchCancelSubscribe(callback: ((Any ...)->Void)?) {
- #if VERSION_FREE
- // 判断用户是否处于试用后退订
- KMMemberCenterManager.judgeTrailCancel { success, resultModel, error in
- callback?()
-
- if success == true {
- self.trailCancel = resultModel?.result ?? false
-
- if self.trailCancel {
- self.openCancelSubscribeWindow()
- }
- }
- }
- #endif
- }
-
- // 退订窗口
- func openCancelSubscribeWindow() {
- #if VERSION_DMG
- if KMDataManager.ud_bool(forKey: kKMAdvancedYearSubscribedOfTrial) == false { // 没有试用过
- return
- }
-
- // 高级版年订阅有试用过
- let member = KMMemberInfo.shared
- if member.isLogin == false {
- return
- }
- if member.is_advanced_year_subscribe() && member.vip_payType == 1 {
- // 高级版年订阅有试用 续订
- return
- }
-
- if KMCancelSubscribeSuccessWindowController.shared.needShow() {
- KMCancelSubscribeSuccessWindowController.shared.openWindow()
- }
- #else
- if KMMemberInfo.shared.isLogin == false && advancedYearSubscribeTrailCancelForLocal() { // 本地权益 高级版年订阅试用退订
- if KMMemberInfo.shared.isMemberAllFunction { // 有本地 或 账号权益
- return
- }
-
- let winC = KMCancelSubscribeSuccessWindowController.shared
- if winC.needShow() {
- if winC.window?.isVisible == true {
- } else {
- winC.openWindow()
- }
- }
- return
- }
-
- if KMDataManager.ud_bool(forKey: kKMAdvancedYearSubscribedOfTrial) == false { // 没有试用过
- return
- }
-
- // 高级版年订阅有试用过
- let member = KMMemberInfo.shared
- if member.isLogin == false {
- return
- }
- if member.is_advanced_year_subscribe() && member.isCancelSubscribe() == false {
- // 高级版年订阅有试用 续订
- return
- }
-
- let winC = KMCancelSubscribeSuccessWindowController.shared
- if winC.needShow() {
- if winC.window?.isVisible == true {
- } else {
- winC.openWindow()
- }
- }
- #endif
- }
-
- func hasCheckInForToday(for email: String) -> Bool {
- let record = fetchRecord(for: email)
- if record.isEmpty {
- return false
- }
-
- guard let recordTime = record["time"] as? TimeInterval, recordTime > 0 else {
- return false
- }
- let recordDate = Date(timeIntervalSince1970: recordTime)
- if recordDate.isToday() { // 今天已经签到
- return true
- }
- return false
- }
-
- func fetchDayNumRecord(for email: String) -> Int {
- let record = fetchRecord(for: email)
- if record.isEmpty {
- return 0
- }
-
- let dayNum = record["dayNum"] as? Int
- return dayNum ?? 0
- }
-
- // MARK: - Record
-
- func saveRecord(dayNum: Int) {
- let member = KMMemberInfo.shared
- if member.isLogin == false {
- return
- }
-
- let userEmail = member.userEmail
- if userEmail.isEmpty {
- return
- }
-
- if hasCheckInForToday(for: userEmail) { // 今天已经签到
- return
- }
-
- // 暂时没有做数量限制
- var dict = KMDataManager.udExtension_object(forKey: "CheckInRecords") as? [String : Any] ?? [:]
- let time = Date().timeIntervalSince1970
- let data = ["email" : userEmail, "time" : time, "dayNum" : dayNum] as [String : Any]
- dict[userEmail] = data
- KMDataManager.udExtension_set(dict , forKey: "CheckInRecords")
- }
-
- func fetchRecords() -> [String : Any] {
- let datas = KMDataManager.udExtension_object(forKey: "CheckInRecords") as? [String : Any]
- return datas ?? [:]
- }
-
- func fetchRecord(for key: String) -> [String : Any] {
- let data = fetchRecords()[key] as? [String : Any]
- return data ?? [:]
- }
- }
|