Files
swiftGrammar/AIGrammar/lib/InitAPP.swift
2024-08-12 10:49:20 +08:00

94 lines
3.1 KiB
Swift

//
// 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()
}
}