-
[iOS/Swift] Firebase Remote Config야매 iOS 2022. 11. 19. 17:36
Remote Config를 사용하는 이유
앱은 변화가 빈번하게 일어납니다.
기능 추가와 버그 수정 같이 앱의 기능에 영향을 미치는 변화가 있을 수 있고 큰 변화는 아니지만 화면 상에서 큰 변화처럼 느끼는 색 변화, 컴포넌트의 위치 변화와 같은 변화들이 있을 수 있습니다.
후자의 경우 수정하는 것은 쉽지만 변경 사항들이 배포되어 실제로 적용되기까지의 시간은 오래 걸립니다.
이때 Remote Config를 사용하면 배포 과정 없이 변경 사항을 앱에 적용할 수 있습니다.
Remote Config 설정
1. Firebase Remote Config를 사용하기 위해선 프로젝트를 생성해야 합니다.
https://firebase.google.com/console
위의 링크를 누르면 Firebase 콘솔로 이동하게 됩니다.
Firebase를 사용하기 위해선 프로젝트를 생성해야되므로 로그인을 하고 프로젝트 추가 버튼을 눌러줍니다.

2. 프로젝트 이름 설정
3. 구글 애널리틱스 사용 설정 on

4. 앱 등록 설정
아래와 같은 화면에서 iOS 버튼을 눌러 iOS앱을 등록한다

5. 앱 등록
Apple 번들 ID에 현재 프로젝트의 BundleIdentifier를 넣고 앱 닉네임에 현재 프로젝트 이름을 넣어준다.
App Store ID가 있는 사람들은 넣어도 되고 없는 사람은 넣지 않아도 된다. 넣지 않아도 잘 동작한다.

6. GoogleService-info.plist 다운로드
파이어베이스에서 제공하는 GoogleService-info.plist를 다운로드 받아 프로젝트에 적용해줍니다.

Remote Config의 동작 방식
Remote Config는 클라우드에 저장되어 있는 데이터이며 [String: Any?]로 이뤄져 있다
앱에는 기본 값(default value)가 설정되어 있고 앱이 시작할 때 클라우드로부터 새로운 값(변경된 값)을 받아와 기본값을 대체한다.
1. Remote Config에 기본값 설정
2. 변경 사항이 있다면 Remote Config에 새로운 값을 적용하고 활성화 한다. (기본 값을 새로운 값으로 대체한다)
3. Remote Config에 질의하면 가장 최근에 갱신된 값을 전달한다.

프로젝트 적용
AppDelegate application(_ , didFinishLaunchingWithOptions)에 FirebaseApp.configure 추가
- 이전에 다운로드 받았던 GoogleService-info.plist를 중심으로 Firebase를 초기화한다.
FirebaseApp.configure()singletonPattern을 사용해서 sharedInstance를 통해 프로젝트 어디에서도 값을 참조할 수 있도록 설정
import Firebase enum RCKeys: String { case appPrimaryColor } class RCValues { static let sharedInstance = RCValues() private init() { loadDefaultValues() } // 키와 밸류 형태로 Remote Config에 기본 값 전달 func loadDefaultValues() { let appDefaults: [String: Any?] = [ RCKeys.appPrimaryColor.rawValue: "#FFFFFF" ] RemoteConfig.remoteConfig().setDefaults(appDefaults as? [String: NSObject]) } // Remote Config는 클라우드에서 가져온 데이터를 대략 12시간 동안 캐시 // 개발 할 때 새로운 값을 테스트하는 것이 어려워짐 // 그래서 minimumFetchInteraval을 통해 캐시된 데이터를 사용하지 않고 데이터를 받아오도록 설정할 수 있다 func activateDebugMode() { let settings = RemoteConfigSettings() // Only for testing!!! settings.minimumFetchInterval = 0 RemoteConfig.remoteConfig().configSettings = settings } func fetchCloudValues() { // 1 activateDebugMode() // 2 RemoteConfig.remoteConfig().fetch { [weak self] _, error in if let error = error { print("error fetching remote values \(error)") return } // 3 RemoteConfig.remoteConfig().activate { _, _ in print("Retrieved values from the cloud!") } } func getStringValue(key: RCKeys) -> String? { return RemoteConfig.remoteConfig().configValue(forKey: key.rawValue).stringValue } }기본으로 설정된 캐시 시간이 12시간이므로 대략 12시간 동안 캐시
이러한 제한을 둬서 클라우드에 직접적으로 접근하는 횟수를 제한한다.
코드 진행 과정
- 디버그 모드 활성화 ( 12시간 제한을 풀어서 서버에서 바로 데이터를 받아 올 수 있도록 설정)
- Remote Config fetch
- 2.1 에러 시 fetch 하지 않고 종료
- 성공적으로 fetch 되면 Remote Config는 개발자가 하드코딩한 기본값이 새로운 값으로 대체된다
Remote Config Values
Remote Config는 값을 Remote Config Value 객체로 가져온다.
Remote Config Value 객체는 데이터를 감싸는 wrapper고 데이터는 내부적으로 UTF8-ecoded String이다.

사용자들이 Remote Config Value에서 데이터를 추출할 필요 없고 numberValue, boolValue를 사용해 실제 데이터를 추출할 수 있다.
RemoteConfig.remoteConfig().configValue(forKey: "appPrimaryColor").numberValue새로운 값 적용하기
Firebase Console에서 Remote Config로 들어가 매개변수를 생성하고 새로운 값을 설정하면 된다.
타겟층을 세분화하고 싶다면 아래에 있는 새로 추가를 클릭해 타켓을 세분화할 수 있다.

'야매 iOS' 카테고리의 다른 글
[iOS/Swift] Firebase A/B Test (0) 2022.11.19 [iOS/Swift] Firebase Event (0) 2022.11.19 present한 뷰컨트롤러 dismiss 후 바로 뷰컨트롤러 present (0) 2021.12.25 [iOS/Swift] 네이버 지도 API 사용하기 ii (0) 2021.11.30 [iOS/Swift] 네이버 지도 API 사용하기 i (0) 2021.11.30