TSPurchaseTool.swift 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. //
  2. // TSPurchaseTool.swift
  3. // AIRingtone
  4. //
  5. // Created by 100Years on 2025/3/16.
  6. //
  7. /// 免费生成图片次
  8. public enum VipFreeNumType: String, CaseIterable {
  9. case none = "kNone"
  10. case ringtones = "kRingtonesFreeNum"
  11. case posetr = "kPosetrFreeNum"
  12. case photo = "kPhotoFreeNum"
  13. }
  14. let kPurchaseToolShared = TSPurchaseTool.shared
  15. class TSPurchaseTool {
  16. private let kFreeNumKey = "kFreeNumKey"
  17. static let shared = TSPurchaseTool()
  18. init() {
  19. initializeForFree()
  20. }
  21. // 免费使用会员的次数
  22. var freeDict:[String:Int] = [:]
  23. var isVip:Bool{
  24. // #if DEBUG
  25. // return true
  26. // #endif
  27. return kPurchaseDefault.isVip
  28. }
  29. /// 使用一次免费次数
  30. func useOnceForFree(type:VipFreeNumType){
  31. // if isVip {
  32. // return
  33. // }
  34. var freeNum = freeDict[type.rawValue] ?? 0
  35. if freeNum > 0 {
  36. freeNum-=1
  37. }
  38. if freeNum < 0 {
  39. freeNum = 0
  40. }
  41. freeDict[type.rawValue] = freeNum
  42. saveForFree()
  43. NotificationCenter.default.post(name: .kVipFreeNumChanged, object: nil, userInfo: ["VipFreeNumType": type])
  44. }
  45. func freeNum(type:VipFreeNumType) -> Int{
  46. let freeNum = freeDict[type.rawValue] ?? 0
  47. return freeNum
  48. }
  49. func saveForFree(){
  50. UserDefaults.standard.set(freeDict, forKey: kFreeNumKey)
  51. UserDefaults.standard.synchronize()
  52. }
  53. func initializeForFree(){
  54. if let dict = UserDefaults.standard.dictionary(forKey: kFreeNumKey) as? [String:Int]{
  55. freeDict = dict
  56. }else{
  57. freeDict = [
  58. VipFreeNumType.ringtones.rawValue:1,
  59. VipFreeNumType.posetr.rawValue:1,
  60. VipFreeNumType.photo.rawValue:1
  61. ]
  62. saveForFree()
  63. }
  64. }
  65. /// 免费次数是否可用
  66. func freeNumAvailable(type:VipFreeNumType) -> Bool{
  67. if isVip == true {
  68. return true
  69. }else{
  70. if let freeNum = freeDict[type.rawValue],freeNum > 0 {
  71. return true
  72. }
  73. }
  74. return false
  75. }
  76. /// 是否展示生成类的会员图标
  77. func generateVipShow(type:VipFreeNumType) -> Bool{
  78. if isVip == false, freeNum(type: type) > 0 {
  79. return false
  80. }
  81. return true
  82. }
  83. }
  84. extension TSPurchaseTool{
  85. func luanchuPrchase() {
  86. kPurchaseDefault.AppleSharedKey = "4ed5151881304025bfee0295ee459422"
  87. kPurchaseDefault.purchaseProducts = [
  88. PurchaseProduct(productId: "01", period:.month)
  89. ]
  90. kPurchaseDefault.requestProducts()
  91. }
  92. }
  93. extension TSPurchaseTool{
  94. func kJudgeVipFreeType(vipFreeNumType:VipFreeNumType,
  95. vc:UIViewController,
  96. closePageBlock:(()->Void)? = nil) -> Bool {
  97. //判断 vip
  98. return kJudgeVip(externalBool: kPurchaseToolShared.freeNumAvailable(type: vipFreeNumType) == false, vc: vc,closePageBlock: closePageBlock)
  99. }
  100. func kJudgeVip(externalBool:Bool,
  101. vc:UIViewController,
  102. closePageBlock:(()->Void)? = nil) -> Bool {
  103. //判断 vip
  104. if externalBool,
  105. kPurchaseToolShared.isVip == false
  106. {
  107. TSPurchaseVC.show(target: vc, closePageBlock: nil)
  108. return true
  109. }
  110. return false
  111. }
  112. func kshareBand(needVip:Bool,
  113. vc:UIViewController,
  114. urlString:String,
  115. fileName:String,
  116. closePageBlock:(()->Void)? = nil) -> Bool {
  117. //判断 vip
  118. if needVip,
  119. kPurchaseToolShared.isVip == false
  120. {
  121. TSPurchaseVC.show(target: vc, closePageBlock: nil)
  122. return true
  123. }
  124. TSBandRingTool.creatBandRingTool().shareBandVC(vc: vc, fileURLString: urlString, fileName: fileName)
  125. return false
  126. }
  127. }