TSPurchaseManager+Free.swift 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. //
  2. // TSPurchaseManager+Free.swift
  3. // AIEmoji
  4. //
  5. // Created by 100Years on 2025/7/24.
  6. //
  7. let kFreeNumKey = "kFreeNumKey"
  8. extension PurchaseManager {
  9. /// 使用一次免费次数
  10. func useOnceForFree(type: VipFreeNumType) {
  11. if isVip {
  12. return
  13. }
  14. /// 总使用次数
  15. saveForVipFreeNum(type: type)
  16. saveForDayGeneratedNum(type: type)
  17. saveForVipGeneratedNum(type: type)
  18. }
  19. func saveForUserKeychain(data:[String:Any],key:String) {
  20. UserDefaults.standard.set(data, forKey: key)
  21. UserDefaults.standard.synchronize()
  22. //保存到钥匙串
  23. if let jsonString = data.toJSONString() {
  24. KeychainManager.save(jsonString, forKey: key)
  25. dePrint("从钥匙串存入了key=\(key),jsonString=\(jsonString)")
  26. }
  27. }
  28. }
  29. /// 免费生成图片次数
  30. extension PurchaseManager {
  31. func initializeForFree() {
  32. if let jsonString = KeychainManager.load(forKey: kFreeNumKey, type: String.self),
  33. let jsonDict = jsonString.jsonDict() as? [String: Int]
  34. {
  35. UserDefaults.standard.set(jsonDict, forKey: kFreeNumKey)
  36. UserDefaults.standard.synchronize()
  37. dePrint("从钥匙串取出了freeDict=\(jsonDict)")
  38. }
  39. if let jsonString = KeychainManager.load(forKey: kDayGeneratedNumKey, type: String.self),
  40. let jsonDict = jsonString.jsonDict() as? [String: [String: Any]]
  41. {
  42. UserDefaults.standard.set(jsonDict, forKey: kDayGeneratedNumKey)
  43. UserDefaults.standard.synchronize()
  44. dePrint("从钥匙串取出了kDayGeneratedNumKey=\(jsonDict)")
  45. }
  46. if let jsonString = KeychainManager.load(forKey: kVipGeneratedNumKey, type: String.self),
  47. let jsonDict = jsonString.jsonDict() as? [String: [String: Any]]
  48. {
  49. UserDefaults.standard.set(jsonDict, forKey: kVipGeneratedNumKey)
  50. UserDefaults.standard.synchronize()
  51. dePrint("从钥匙串取出了kVipGeneratedNumKey=\(jsonDict)")
  52. }
  53. }
  54. func saveForVipFreeNum(type: VipFreeNumType){
  55. var freeDict = getFreeDict()
  56. var freeNum = freeDict[type.rawValue] ?? 0
  57. if freeNum > 0 {
  58. freeNum-=1
  59. }
  60. if freeNum < 0 {
  61. freeNum = 0
  62. }
  63. freeDict[type.rawValue] = freeNum
  64. saveForUserKeychain(data: freeDict,key: kFreeNumKey)
  65. NotificationCenter.default.post(name: .kVipFreeNumChanged, object: nil, userInfo: ["VipFreeNumType": type])
  66. }
  67. func freeNum(type:VipFreeNumType) -> Int{
  68. let freeNum = getFreeDict()[type.rawValue] ?? 0
  69. return freeNum
  70. }
  71. func getFreeDict()->[String:Int]{
  72. if let dict = UserDefaults.standard.dictionary(forKey: kFreeNumKey) as? [String:Int]{
  73. return dict
  74. }else{
  75. let dict = [
  76. VipFreeNumType.generatePic.rawValue: 1,
  77. VipFreeNumType.aichat.rawValue: 1,
  78. VipFreeNumType.textGeneratePic.rawValue: 1,
  79. VipFreeNumType.picToPic.rawValue: 1,
  80. VipFreeNumType.aiGenerate.rawValue: 1,
  81. VipFreeNumType.videoV2.rawValue: 1,
  82. ]
  83. return dict
  84. }
  85. }
  86. /// 免费次数是否可用
  87. func freeNumAvailable(type: VipFreeNumType) -> Bool {
  88. if isVip == true {
  89. return true
  90. } else {
  91. if let freeNum = getFreeDict()[type.rawValue], freeNum > 0 {
  92. return true
  93. }
  94. }
  95. return false
  96. }
  97. /// 是否展示生成类的会员图标
  98. func generateVipShow(type: VipFreeNumType) -> Bool {
  99. if isVip == false, freeNum(type: type) > 0 {
  100. return false
  101. }
  102. return true
  103. }
  104. }