// // TSPurchaseManager+Free.swift // AIEmoji // // Created by 100Years on 2025/7/24. // let kFreeNumKey = "kFreeNumKey" extension PurchaseManager { /// 使用一次免费次数 func useOnceForFree(type: VipFreeNumType) { if isVip { return } /// 总使用次数 saveForVipFreeNum(type: type) saveForDayGeneratedNum(type: type) saveForVipGeneratedNum(type: type) } func saveForUserKeychain(data:[String:Any],key:String) { UserDefaults.standard.set(data, forKey: key) UserDefaults.standard.synchronize() //保存到钥匙串 if let jsonString = data.toJSONString() { KeychainManager.save(jsonString, forKey: key) dePrint("从钥匙串存入了key=\(key),jsonString=\(jsonString)") } } } /// 免费生成图片次数 extension PurchaseManager { func initializeForFree() { if let jsonString = KeychainManager.load(forKey: kFreeNumKey, type: String.self), let jsonDict = jsonString.jsonDict() as? [String: Int] { UserDefaults.standard.set(jsonDict, forKey: kFreeNumKey) UserDefaults.standard.synchronize() dePrint("从钥匙串取出了freeDict=\(jsonDict)") } if let jsonString = KeychainManager.load(forKey: kDayGeneratedNumKey, type: String.self), let jsonDict = jsonString.jsonDict() as? [String: [String: Any]] { UserDefaults.standard.set(jsonDict, forKey: kDayGeneratedNumKey) UserDefaults.standard.synchronize() dePrint("从钥匙串取出了kDayGeneratedNumKey=\(jsonDict)") } if let jsonString = KeychainManager.load(forKey: kVipGeneratedNumKey, type: String.self), let jsonDict = jsonString.jsonDict() as? [String: [String: Any]] { UserDefaults.standard.set(jsonDict, forKey: kVipGeneratedNumKey) UserDefaults.standard.synchronize() dePrint("从钥匙串取出了kVipGeneratedNumKey=\(jsonDict)") } } func saveForVipFreeNum(type: VipFreeNumType){ var freeDict = getFreeDict() var freeNum = freeDict[type.rawValue] ?? 0 if freeNum > 0 { freeNum-=1 } if freeNum < 0 { freeNum = 0 } freeDict[type.rawValue] = freeNum saveForUserKeychain(data: freeDict,key: kFreeNumKey) NotificationCenter.default.post(name: .kVipFreeNumChanged, object: nil, userInfo: ["VipFreeNumType": type]) } func freeNum(type:VipFreeNumType) -> Int{ let freeNum = getFreeDict()[type.rawValue] ?? 0 return freeNum } func getFreeDict()->[String:Int]{ if let dict = UserDefaults.standard.dictionary(forKey: kFreeNumKey) as? [String:Int]{ return dict }else{ let dict = [ VipFreeNumType.generatePic.rawValue: 1, VipFreeNumType.aichat.rawValue: 1, VipFreeNumType.textGeneratePic.rawValue: 1, VipFreeNumType.picToPic.rawValue: 1, VipFreeNumType.aiGenerate.rawValue: 1, VipFreeNumType.videoV2.rawValue: 1, ] return dict } } /// 免费次数是否可用 func freeNumAvailable(type: VipFreeNumType) -> Bool { if isVip == true { return true } else { if let freeNum = getFreeDict()[type.rawValue], freeNum > 0 { return true } } return false } /// 是否展示生成类的会员图标 func generateVipShow(type: VipFreeNumType) -> Bool { if isVip == false, freeNum(type: type) > 0 { return false } return true } }