KMFirebaseRemoteConfig.swift 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. import Foundation
  2. import FirebaseRemoteConfig
  3. enum KMRemoteConfigFetchStatus: Int {
  4. case success
  5. case failure
  6. }
  7. let KMFirebaseRemateConfigRequestIsSuccessful = "KMFirebaseRemateConfigRequestIsSuccessful"
  8. let KMFirebaseRemateConfigFinishNoti = "KMFirebaseRemateConfigFinishNoti"
  9. class KMKdanRemoteConfig: NSObject {
  10. typealias KMRemoteConfigFetchCompletion = (KMRemoteConfigFetchStatus, Error?) -> Void
  11. private let kIsDisplayAdsKey = "isDisplayAds"
  12. private let kIsDisplayAdsEvaluateAfterKey = "isDisplayAdsEvaluateAfter"
  13. private let kDisplayAdsUrlConfigKey = "displayAdsUrl"
  14. private let kDisplayHouseAdsUrlConfigKey = "displayHouseAdsUrl"
  15. private let kRefreshAdsRateDayKey = "refreshAdsRate"
  16. private let kRefreshAdsRateDayEvaluateAfterKey = "refreshAdsRateEvaluateAfter"
  17. private let kRefreshAdsDateDayKey = "refreshAdsDate"
  18. private let kRefreshAdsDateDayEvaluateAfterKey = "refreshAdsDateEvaluateAfter"
  19. private let kCloseIntervalDateDayKey = "closeIntervalDate"
  20. private let kCloseIntervalDateDayEvaluateAfterKey = "closeIntervalDateEvaluateAfter"
  21. private let kAppEvaluateBeforeAdsCountKey = "appEvaluateBeforeAdsCount"
  22. private let kAppEvaluateAfterAdsCountKey = "appEvaluateAfterAdsCount"
  23. private var remoteConfigDatas: [String: Any] = [:]
  24. private var userInfo: [String: Any] = [:]
  25. private lazy var firebaseConfig: RemoteConfig = {
  26. let config = RemoteConfig.remoteConfig()
  27. let settings = RemoteConfigSettings()
  28. settings.minimumFetchInterval = 0
  29. config.configSettings = settings
  30. #if VERSION_FREE
  31. config.setDefaults(fromPlist: "RemoteConfigDefaults")
  32. #else
  33. config.setDefaults(fromPlist: "ProRemoteConfigDefaults")
  34. #endif
  35. return config
  36. }()
  37. static func remoteConfig() -> KMKdanRemoteConfig {
  38. return KMKdanRemoteConfig()
  39. }
  40. override init() {
  41. super.init()
  42. let mainBundleString = Bundle.main.bundleIdentifier ?? ""
  43. var dataPath: String?
  44. #if VERSION_DMG
  45. dataPath = Bundle.main.path(forResource: "DMGRemoteConfigDefaults", ofType: "plist")
  46. #else
  47. #if VERSION_FREE
  48. dataPath = Bundle.main.path(forResource: "RemoteConfigDefaults", ofType: "plist")
  49. #else
  50. dataPath = Bundle.main.path(forResource: "ProRemoteConfigDefaults", ofType: "plist")
  51. #endif
  52. #endif
  53. if let path = dataPath, let dict = NSDictionary(contentsOfFile: path) as? [String: Any] {
  54. self.userInfo = dict
  55. }
  56. }
  57. func fetch(completionHandler: @escaping KMRemoteConfigFetchCompletion) {
  58. // Your implementation here
  59. }
  60. func fetchWithRemoteConfigCompletionHandler(completionHandler: @escaping RemoteConfigFetchCompletion) {
  61. // Your implementation here
  62. }
  63. func isDisplayAds() -> Bool {
  64. var isDisplayAds = userInfo[kIsDisplayAdsKey] as? Bool ?? true
  65. if let value = remoteConfigDatas[kIsDisplayAdsKey] as? Bool {
  66. isDisplayAds = value
  67. }
  68. return isDisplayAds
  69. }
  70. func isDisplayAdsEvaluateAfter() -> Bool {
  71. var isDisplayAds = userInfo[kIsDisplayAdsEvaluateAfterKey] as? Bool ?? true
  72. if let value = remoteConfigDatas[kIsDisplayAdsEvaluateAfterKey] as? Bool {
  73. isDisplayAds = value
  74. }
  75. return isDisplayAds
  76. }
  77. func displayHouseAdsUrl() -> String {
  78. var adsUrl = userInfo[kDisplayHouseAdsUrlConfigKey] as? String ?? ""
  79. if let value = remoteConfigDatas[kDisplayHouseAdsUrlConfigKey] as? String {
  80. adsUrl = value.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? ""
  81. }
  82. return adsUrl
  83. }
  84. func displayAdsUrl() -> String {
  85. var adsUrl = userInfo[kDisplayAdsUrlConfigKey] as? String ?? ""
  86. if let value = remoteConfigDatas[kDisplayAdsUrlConfigKey] as? String {
  87. adsUrl = value.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? ""
  88. }
  89. return adsUrl
  90. }
  91. func refreshAdsRate() -> Int {
  92. var adsRate = userInfo[kRefreshAdsRateDayKey] as? Int ?? 0
  93. if let value = remoteConfigDatas[kRefreshAdsRateDayKey] as? Int {
  94. adsRate = value
  95. }
  96. return adsRate
  97. }
  98. func refreshAdsRateEvaluateAfter() -> Int {
  99. var adsRate = userInfo[kRefreshAdsRateDayEvaluateAfterKey] as? Int ?? 0
  100. if let value = remoteConfigDatas[kRefreshAdsRateDayEvaluateAfterKey] as? Int {
  101. adsRate = value
  102. }
  103. return adsRate
  104. }
  105. func refreshAdsDate() -> Int {
  106. var adsDate = userInfo[kRefreshAdsDateDayKey] as? Int ?? 0
  107. if let value = remoteConfigDatas[kRefreshAdsDateDayKey] as? Int {
  108. adsDate = value
  109. }
  110. return adsDate
  111. }
  112. func refreshAdsDateEvaluateAfter() -> Int {
  113. var adsDate = userInfo[kRefreshAdsDateDayEvaluateAfterKey] as? Int ?? 0
  114. if let value = remoteConfigDatas[kRefreshAdsDateDayEvaluateAfterKey] as? Int {
  115. adsDate = value
  116. }
  117. return adsDate
  118. }
  119. func closeIntervalDate() -> Int {
  120. var intervalDate = userInfo[kCloseIntervalDateDayKey] as? Int ?? 0
  121. if let value = remoteConfigDatas[kCloseIntervalDateDayKey] as? Int {
  122. intervalDate = value
  123. }
  124. return intervalDate
  125. }
  126. func closeIntervalDateEvaluateAfter() -> Int {
  127. var intervalDate = userInfo[kCloseIntervalDateDayEvaluateAfterKey] as? Int ?? 0
  128. if let value = remoteConfigDatas[kCloseIntervalDateDayEvaluateAfterKey] as? Int {
  129. intervalDate = value
  130. }
  131. return intervalDate
  132. }
  133. func appEvaluateBeforeAdsCount() -> Int {
  134. var evaluateCount = userInfo[kAppEvaluateBeforeAdsCountKey] as? Int ?? 0
  135. if let value = remoteConfigDatas[kAppEvaluateBeforeAdsCountKey] as? Int {
  136. evaluateCount = value
  137. }
  138. return evaluateCount
  139. }
  140. func appEvaluateAfterAdsCount() -> Int {
  141. var evaluateCount = userInfo[kAppEvaluateAfterAdsCountKey] as? Int ?? 0
  142. if let value = remoteConfigDatas[kAppEvaluateAfterAdsCountKey] as? Int {
  143. evaluateCount = value
  144. }
  145. return evaluateCount
  146. }
  147. func showSDKRecommendInfo() -> Bool {
  148. guard firebaseConfig.lastFetchStatus == .success else {
  149. return false
  150. }
  151. return firebaseConfig["SDKRecommendKey"].boolValue
  152. }
  153. func showAPP_AveragePrice() -> Bool {
  154. guard firebaseConfig.lastFetchStatus == .success else {
  155. return false
  156. }
  157. return firebaseConfig["ShowAPP_AveragePrice"].boolValue
  158. }
  159. func showHelp_More_RecommendLink() -> Bool {
  160. guard firebaseConfig.lastFetchStatus == .success else {
  161. return false
  162. }
  163. return firebaseConfig["Help_More_Link_Recommend"].boolValue
  164. }
  165. }