투케이2K

123. (TWOK/UTIL) [Ios/Swift] C_FirebaseRemoteConfig - 파이어베이스 리모트 컨피그 원격 공지 확인 클래스 본문

투케이2K 유틸파일

123. (TWOK/UTIL) [Ios/Swift] C_FirebaseRemoteConfig - 파이어베이스 리모트 컨피그 원격 공지 확인 클래스

투케이2K 2024. 3. 6. 20:19

[설 명]

프로그램 : Ios / Swift

설 명 : C_FirebaseRemoteConfig - 파이어베이스 리모트 컨피그 원격 공지 확인 클래스

 

[소스 코드]

import Foundation
import UIKit
// ----------------------------------
// MARK: - [파이어베이스 라이브러리]
// ----------------------------------
import Firebase
// ----------------------------------

class C_FirebaseRemoteConfig {



    /**
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * TODO [클래스 설명]
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * 1. 파이어베이스 리모트 컨피트 관리 클래스
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * 2. 참고 : 실제 운영 환경에서 파이어베이스 리모트 컨피그는 1시간에 4회 이상 호출 하면 에러가 발생 (즉, 20 분 마다 시간 측정 후 1번 씩 호출)
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * 3. 참고 : AppDelegate 파일에서 사전 FirebaseApp.configure 정의 필요
     *
     * let fireBaseConfigFile = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist")!
     * let firOptions = FirebaseOptions(contentsOfFile: fireBaseConfigFile)!
     * FirebaseApp.configure(options: firOptions)
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * */





    /**
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * //  TODO [빠른 로직 찾기 : 주석 로직 찾기]
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * // [SEARCH FAST] : [Observable] : [Get Key] : 특정 키 값 호출
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     *
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     *
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     *
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     *
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * */
    
    
    
    
    
    // -----------------------------------------------------------------------------------------
    // MARK: - [전역 변수 선언]
    // -----------------------------------------------------------------------------------------
    private static let ACTIVITY_NAME = "C_FirebaseRemoteConfig"





    // -----------------------------------------------------------------------------------------
    // MARK: - [SEARCH FAST] : [Observable] : [Get Key] : 특정 키 값 호출
    // -----------------------------------------------------------------------------------------
    func observableRemoteConfigGetKey(key:String, completion: @escaping (String)->()) {
        
        /*
        // -----------------------------------------
        [observableRemoteConfigGetKey 메소드 설명]
        // -----------------------------------------
        1. 파이어베이스 리모트 컨피그 특정 key 값 확인
        // -----------------------------------------
        2. 호출 방법 :
         
         C_FirebaseRemoteConfig().observableRemoteConfigGetKey(key: "test_key"){(result) in
             
             S_Log._F_(description: "파이어베이스 리모트 컨피그 콜백 결과 확인", data: ["\(result)"])
             
         }
         
        // -----------------------------------------
        */
        
        // [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
        DispatchQueue.main.async {
            S_Log._F_(description: C_FirebaseRemoteConfig.ACTIVITY_NAME + " : [Firebase] [Remote Config] 원격 알림 내용 확인 수행", data: [
                "KEY :: \(key)"
            ])
            
            
            // [key 널 체크]
            if C_Util().stringNotNull(str: key) == true {
                
                // [파이어베이스 리모트 객체 생성 실시]
                var remoteConfig = RemoteConfig.remoteConfig()
                var settings = RemoteConfigSettings()
                settings.minimumFetchInterval = 0 // MARK: [Fetch 파이어베이스 리모트 컨피그 읽기 딜레이 시간]
                remoteConfig.configSettings = settings
                
                // [해당 키값이 없을 경우 디폴트 값 삽입]
                let defaultDic: NSDictionary = ["\(key)":""]
                remoteConfig.setDefaults(defaultDic as? [String : NSObject])

                // [리모트 컨피그 값 확인]
                remoteConfig.fetch { (status, error) -> Void in
                    if status == .success {
                        remoteConfig.activate { changed, error in
                            if error != nil {
                                S_Log._F_(description: C_FirebaseRemoteConfig.ACTIVITY_NAME + " : [Firebase] [Remote Config] [Error] - Remote Config Connection : Not Success", data: [
                                    "KEY :: \(key)",
                                    "ERROR :: \(String(describing: error?.localizedDescription))"
                                ])
                                
                                // [콜백 반환]
                                completion("\(remoteConfig.configValue(forKey: "\(key)").stringValue ?? "")")
                            }
                            else {
                                S_Log._F_(description: C_FirebaseRemoteConfig.ACTIVITY_NAME + " : [Firebase] [Remote Config] [Success] - Remote Config Connection : onComplete", data: [
                                    "KEY :: \(key)",
                                    "VALUE :: \(remoteConfig.configValue(forKey: "\(key)").stringValue ?? "")"
                                ])
                                
                                // [콜백 반환]
                                completion("\(remoteConfig.configValue(forKey: "\(key)").stringValue ?? "")")
                            }
                        }
                    }
                    else {
                        S_Log._F_(description: C_FirebaseRemoteConfig.ACTIVITY_NAME + " : [Firebase] [Remote Config] [Error] - Remote Config Connection : unSuccess", data: [
                            "KEY :: \(key)",
                            "ERROR :: \(String(describing: error?.localizedDescription))"
                        ])
                        
                        // [콜백 반환]
                        completion("")
                    }
                }

            }
            else {
                S_Log._F_(description: C_FirebaseRemoteConfig.ACTIVITY_NAME + " : [Firebase] [Remote Config] [Error] - Remote Config Connection", data: [
                    "ERROR :: Input Data Is Null"
                ])
                
                // [콜백 반환]
                completion("")
            }
            
        }
    }

    
} // [클래스 종료]
 
반응형
Comments