// // InitAPP.swift // AIGrammar // // Created by oscar on 2024/6/26. // import Foundation import Alamofire import TrustDecision import SwiftJWT import SwiftyBeaver class InitApp { static let shared = InitApp(environment: globalEnvironment) private let userDefaults = UserDefaults.standard private let deviceIDKey = "DeviceID" private let vipStatusKey = "VIPStatus" private var deviceID: String = "" private var vipStatus: Bool = false var environment: GlobalEnvironment init(environment: GlobalEnvironment) { self.environment = environment initializeApp() } private func initializeApp() { fetchDeviceID() } private func fetchDeviceID() { if let savedDeviceID = userDefaults.string(forKey: deviceIDKey) { self.environment.deviceID = savedDeviceID logger.info("DeviceID from UserDefaults: \(savedDeviceID)") // 获取用户状态 getUser() } else { getDeviceIDFromTrustDecision() } } private func getDeviceIDFromTrustDecision() { var options = [String : NSObject]() let responseCallback: ([String : Any]) -> Void = { response in DispatchQueue.main.async { // 确保在主线程更新UI if let deviceId = response["device_id"] as? String { self.deviceID = deviceId self.userDefaults.set(deviceId, forKey: self.deviceIDKey) self.environment.deviceID = deviceId logger.info("Device ID from TrustDecision: \(self.deviceID)") // 获取VIP状态 self.getUser() } } } options["callback"] = unsafeBitCast(responseCallback as @convention(block) ([String : Any]) -> Void, to: AnyObject.self) as? NSObject let manager = TDMobRiskManager.sharedManager() manager?.pointee.initWithOptions(options) } private func getUser() { NetworkManager.shared.getUserProfile() { result in DispatchQueue.main.async { switch result { case .success(let userData): self.vipStatus = userData.vip == 1 self.environment.GID = userData.id self.environment.userID = userData.userid self.environment.userName = userData.username self.environment.isVip = userData.vip == 1 logger.info("getUserProfile: ID: \(userData.id), userID: \(userData.userid), userName: \(userData.username), vip: \(userData.vip)") case .failure(let error): switch error { case .businessError(let ret, let message): logger.error("Business error - Ret: \(ret), Message: \(message)") case .other(let error): logger.error("network occurred: \(error.localizedDescription)") } } } } } func refreshUserInfo(){ getUser() } }