원격구성(Remote Config)이란?
- 사용자가 업데이트를 다운로드 할 필요없이 앱의 동작과 모양을 변경할 수 있는 클라우드 서비스.
- 앱 업데이트를 개시하지 않아도 하루 활성 사용자 제한없이 무료로 앱에 동작과 모양을 변경할 수 있다
- 클라우드 기반 key-value 저장소
- 원격구성을 사용할 때에는 앱의 동작과 모양을 제어하는 인앱 기본값을 만들고 이후에 설정한 기본값을 재정의하며 몇 분 내에 앱에 반영을 할 수 있다.
예)
기본값을 설정해 두고 사용자에게 배포를 했다면, firebase 원격구성의 웹 콘솔을 통해 설정해둔 프로모션텍스트 키 값을 변경할 수 있다.
별도의 앱 업데이트 없이, 심사없이, 변경할 수 있다.
앱 업데이트 없이 몇 분 내에 또는 사용자가 앱을 재실행 했을 때 바로 변경사항 반영이 되게된다.
이 외에도 원격구성을 통해서 앱의 개념을 확장하고 개선하는 방법은 응용하기에 따라 다양하다.
원격 구성의 주요 기능은 이처럼 정리를 해볼 수 있다.
최소 24시간 이상걸리는 심사, 배포 없이 변경 사항을 빠르게 적용할 수 있다.
앱 버젼이나 거주지, 사용언어, 등으로 분류된 세그먼트 별로 다른 값을 제공할 수 있다.
앱의 별도의 코드 작성, 로케일 설정 없이도 한국어로, 영어로, 안녕, 또는 헬로 라고 나타낼 수 있다.
AB테스트를 실행해서 앱 개선하는데에도 원격구성이 활용된다.
원격구성을 사용 할 경우
예를 들어 상황에 따라 공지창을 띄운다면 원격구성으로 받아오는 데이터는 공지사항 탭이아닌 공지사항을 띄우게되는 뷰에서 받아와야한다.
메인 뷰에서 원격구성에 대한 정보를 받아오고 메인 뷰에서 공지사항 뷰로 데이터를 전달해야한다. 또한 공지사항 뷰를 띄울지, 말지도 원격구성으로 정해야 하기 때문.
1. 데이터를 받아올 경우 옵셔널 바인딩을 한 후 각각의 라벨에 설정해준다.
//viewdidload()
guard let noticeContents = noticeContents else {
return
}
titleLabel.text = noticeContents.title
detailLabel.text = noticeContents.detail
dateLabel.text = noticeContents.date
}
2. 파이어베이스와 연결해준다.
https://clamp-coding.tistory.com/entry/Use-Firebase-IOS
단, Google애널리틱스를 활용할거기 때문에 사용설정을 해준다.
설치방법
코코아팟을 활용하여 추가한다.
1. 프로젝트가 있은 폴더를 우클릭, 폴더에서 새로운 터미널 열기
2. 터미널 창에서 pod init을 입력하고 엔터를 누르고 폴더에 들어가면 podfile이 만들어져있다.
3. podfile을 열어서 pod 'Firebase/RemoteConfig', pod 'Firebase/Analytics' 입력
# Pods for 프로젝트이름
pod 'Firebase/RemoteConfig'
pod 'Firebase/Analytics'
3. 터미널로 돌아가서 pod install
m1맥이고 오류가 난다면
$ sudo arch -x86_64 gem install ffi
$ arch -x86_64 pod install
4. xcworkspace로 작업한다.
5. command + b를 눌러 빌드해준다
7. Appdelegate로 가서 초기화를 한다.
import Firebase
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
FirebaseApp.configure()
return true
}
didFinishlaunchingWithOptions 메서드에서 configure()를 해주고 빌드를 한다.
커멘드 + B
(초기화 완료)
6. 사용할 위치에서
import FirebaseRemoteConfig 를 해준다.
원격구성으로 팝업 제어하기
원격구성은 키 벨류 형태로 설정하며 기본값을 업데이트하는 방식.
메인 뷰 컨트롤러에서 값을 불러와서 원격구성을 사용할 뷰로 내용을 전달하고 제어한다.
따라 메인 뷰 컨트롤러에서 원격 구성 플랫폼을 가져와야한다.
1. RemoteConfig 객체를 만들어야한다.
var remoteConfig: RemoteConfig?
2. viewDidLoad에서 remoteconfig를 해준다.
remoteConfig = RemoteConfig.remoteConfig()
let setting = RemoteConfigSettings()
//테스트를 위해 새로운 값을 패치하는 Interval을 최대한 자주 원격 구성에 있는 데이터들을 가져오게 설정.
setting.minimumFetchInterval = 0
//생성한 setting객체를 remoteconfig객체에 적용함.
remoteConfig?.configSettings = setting
3. remoteConfig객체의 기본값을 설정한다.
각 키에대한 기본값을 설정해야한다.
기본값을 설정하기위해 새파일에서 프로퍼티리스트(plist, propertylist file)를 추가해야한다.
원격구성은 Key/Value 형태의 스토리지로 딕셔너리 형태다.
4. 설정한 Default들을 remoteConfig가 인식할 수 있도록 연결해준다
2번에서 config한 부분 아래에 remoteConfig의 Default를 설정해준다.
remoteConfig?.setDefaults(fromPlist: "3번에 생성한 Defaultplist파일이름")
5.
Remote Config로 이동하여 구성만들기를 해준다.
프로퍼티 리스트에서 생성한 매개변수 키와 벨류를 추가할 수 있다.
동일하게 키와 벨류를 통해서 원격구성으로 정의할 수 있다. 따라서 프로퍼티 리스트와 동일하게 키와 기본값을 콘솔에 추가해준다.
6. 이제 설정한 값들을 불러와야한다. 원격구성에서 가저온 값들을 앱에 반영을 한다. 따라서 코드를 추가한다.
guard let remoteConfig = remoteConfig else { return }
//패치를 해준다 [weak self] 순환참조방지
remoteConfig.fetch { [weak self]status, _ in
//만약 status(상태)가 성공이라면
if status == .success{
//remoteConfig를 활성화시킨다.
remoteConfig.activate(completion: nil)
}
//실패라면 에러표시
}else{
print("ERROR")
}
7. 값을 가져온다
isHidden이라는 키를 가진 값을 가져오는 코드
func isNoticeHidden(_ remoteConfig: RemoteConfig) -> Bool{
return remoteConfig["isHidden"].boolValue
}
return remoteConfig["isHidden"].boolValue
.boolValue는 해당 키의 값이 불리언 값이다라고 알려주는 코드.
(참고) 데이터를 가져올 때 파이어베이스 콘솔에서 여러줄의 String을 넣기 위해서는 \n을 쓰게되는데, 파이어베이스에서 \n을 쓰면 fetch를 하는 과정에서는, \(역슬래시)가 \\ 두번 찍히게 된다. 따라서 스위프트에서 인식을 하지못한다. 따라서 역슬래시 하나를 지워주고 우리가 원하는 줄바꿈을 표현하기위해서 해당방법을 사용한다.
let title = (remoteConfig["title"].stringValue ?? "").replacingOccurrences(of: "\\n", with: "\n")
이렇게되면 여러줄을 입력하더라도 잘 인식한다.
8. 가져온 값들을 메인 뷰 컨트롤러에서 데이터가 띄워질 뷰 컨트롤러로 전달을 해준다.
let noticeVC = NoticeViewController(nibName: "NoticeViewController", bundle: nil)
NoticeviewController가 정보가 사용될 뷰 컨트롤러이다.
noticeVC.noticeContents = (title: title, detail: detail, date: date)
self.present(noticeVC, animated: true, completion: nil)
noticeContents는 NoticeViewContorller에 미리 만들어논 튜플이고, 각 데이터에 집어넣어주고 present함수로 뷰를 불러온다.
9. 값 업데이트는 Firebase 웹콘솔을 이용하여 할 수 있는데, 각각의 값을 원하는대로 변경할 수 있다.
다만 코드에서 설정한 자료형들은 맞춰주어야한다.
사용자 조건에 따라 각각 다른값이 보여지게하기