Advertisement
Guest User

Untitled

a guest
Oct 1st, 2018
344
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 3.57 KB | None | 0 0
  1. //
  2. //  RemoteConfigManager.swift
  3. //  Viddl
  4. //
  5. //  Created by Alex Azarov on 8/15/18.
  6. //  Copyright © 2018 Mikhail Lyapich. All rights reserved.
  7. //
  8.  
  9. import FirebaseRemoteConfig
  10.  
  11. class RemoteConfigManager {
  12.    
  13.     enum Keys: String {
  14.         case freeScenesLimit = "free_scenes_limit"
  15.         case freeVideosLimit = "free_videos_limit"
  16.         case serverNgrokUrl = "server_ngrok_url"
  17.         case onboardingVideoCardAlways = "onboarding_video_card_always"
  18.         case sharingDefaultHashtags = "sharing_default_hashtags"
  19.         case ngrokUsername = "server_ngrok_username"
  20.         case ngrokPassword = "server_ngrok_password"
  21.     }
  22.    
  23.     enum IntKeys: String {
  24.         case serverTimeout = "server_timeout"
  25.     }
  26.    
  27.     private static let serverURL = "http://074752d9.ngrok.io"
  28.     static let shared = RemoteConfigManager()
  29.    
  30.     let appDefaults: [String: Any?] = [
  31.         Keys.freeScenesLimit.rawValue: "3",
  32.         Keys.freeVideosLimit.rawValue: "1",
  33.         Keys.serverNgrokUrl.rawValue: RemoteConfigManager.serverURL,
  34.         Keys.onboardingVideoCardAlways.rawValue: "1",
  35.         Keys.sharingDefaultHashtags.rawValue: "#viddl"
  36.     ]
  37.    
  38.     var freeScenesLimit: Int {
  39.         return RemoteConfig.remoteConfig().configValue(forKey: Keys.freeScenesLimit.rawValue).numberValue as? Int ?? 3
  40.     }
  41.    
  42.     var freeVideosLimit: Int {
  43.         return RemoteConfig.remoteConfig().configValue(forKey: Keys.freeVideosLimit.rawValue).numberValue as? Int ?? 1
  44.     }
  45.    
  46.     var serverURL: String {
  47.         return RemoteConfig.remoteConfig().configValue(forKey: Keys.serverNgrokUrl.rawValue).stringValue ?? RemoteConfigManager.serverURL
  48.     }
  49.    
  50.     var needToShowTutorialEveryTime: Bool {
  51.         return RemoteConfig.remoteConfig().configValue(forKey: Keys.onboardingVideoCardAlways.rawValue).boolValue
  52.     }
  53.    
  54.     var sharingDefaultHashtags: String {
  55.         return RemoteConfig.remoteConfig().configValue(forKey: Keys.sharingDefaultHashtags.rawValue).stringValue ?? (appDefaults[Keys.sharingDefaultHashtags.rawValue] as? String)!
  56.     }
  57.    
  58.     var ngrokUsername: String {
  59.         return RemoteConfig.remoteConfig().configValue(forKey: Keys.ngrokUsername.rawValue).stringValue ?? ""
  60.     }
  61.    
  62.     var ngrokPassword: String {
  63.         return RemoteConfig.remoteConfig().configValue(forKey: Keys.ngrokPassword.rawValue).stringValue ?? ""
  64.     }
  65.    
  66.     private init() {
  67.         loadDefaultValues()
  68.         fetchCloudValues()
  69.     }
  70.    
  71.     private func loadDefaultValues() {
  72.         RemoteConfig.remoteConfig().setDefaults(appDefaults as? [String: NSObject])
  73.     }
  74.    
  75.     private func fetchCloudValues() {
  76.        
  77.         let fetchDuration: TimeInterval = 0
  78.         activateDebugMode()
  79.         RemoteConfig.remoteConfig().fetch(withExpirationDuration: fetchDuration) { (status, error) in
  80.             if let error = error {
  81.                 print("Got an error fetching remote values \(error)")
  82.                 return
  83.             }
  84.             RemoteConfig.remoteConfig().activateFetched()
  85.         }
  86.     }
  87.    
  88.     private func activateDebugMode() {
  89.         RemoteConfig.remoteConfig().configSettings = RemoteConfigSettings(developerModeEnabled: true)
  90.     }
  91.    
  92.     private func getRemoteIntDefaults(key: IntKeys) -> Int {
  93.         switch key {
  94.         case .serverTimeout:
  95.             return 180
  96.         }
  97.     }
  98.    
  99.     func getInt(key: IntKeys) -> Int {
  100.         let remoteNumber = RemoteConfig.remoteConfig().configValue(forKey: key.rawValue).numberValue
  101.         return remoteNumber?.intValue ?? getRemoteIntDefaults(key: key)
  102.     }
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement