1. 소개
Play 스토어에 앱을 게시한 후 앱의 일부 매개변수 값을 조정해야 한다고 가정해 보겠습니다. 일반적으로 새 버전의 앱을 다시 게시해야 하며 사용자는 휴대전화에서 앱을 업데이트해야 합니다.
일반적으로 앱에 오래 지속되는 변경사항을 커밋하려면 앱 업데이트가 적합합니다. 하지만 앱의 일부 매개변수 값을 자주 조정해야 하는 경우에는 어떻게 해야 할까요? 또는 최적의 앱 구성을 찾기 위해 실험을 실행하고 싶다면 어떻게 해야 할까요?
이 경우 앱 업데이트가 제대로 작동하지 않습니다. 업데이트가 사용자에게 완전히 전파되기까지 시간이 걸리기 때문입니다. 또한 여러 앱 버전에서 실험을 실행하는 것도 매우 어렵습니다.
또한 앱의 사용자 여정이 의도한 대로 작동하는지 어떻게 확인할 수 있나요? Play Console의 사용자 댓글을 참고할 수 있습니다. 하지만 명확한 결정을 내리기에는 충분히 정확하지 않을 수 있습니다.
학습할 내용
- Firebase용 Google 애널리틱스에서 유입경로를 만드는 방법
- Firebase 원격 구성 사용 방법
- Firebase A/B 테스팅을 실행하는 방법
필요한 항목
- Unity 2018.4.4f1 이상
- Xcode 10 이상 (iOS용 타겟 빌드)
- Google 계정
- Android 5.0 이상이 설치된 테스트 기기(기기를 연결하는 USB 케이블 포함) 또는 Play 스토어/Google API를 지원하는 시스템 이미지로 AVD(Android 가상 기기)를 실행하는 Android Emulator
- iOS 8.0 이상을 실행하는 iOS 기기 또는 시뮬레이터
AdMob 사용 경험 수준을 평가해 주세요.
Firebase 사용 경험 수준을 평가해 주세요.
2. 개발 환경 설정
코드 다운로드
다음 버튼을 클릭하여 이 Codelab의 모든 코드를 다운로드합니다.
다운로드한 ZIP 파일의 압축을 해제합니다. 그러면 admob-firebase-codelabs-unity-master라는 루트 폴더가 압축 해제됩니다.
...또는 명령줄에서 GitHub 저장소를 클론합니다.
$ git clone https://github.com/googlecodelabs/admob-firebase-codelabs-unity
저장소에는 다음과 같은 네 개의 폴더가 포함되어 있습니다.
101-base: 이 Codelab에서 빌드할 시작 코드입니다.
101-complete_and_102-base: 이 Codelab의 완성된 코드 및 102 Codelab의 시작 코드
102-complete: 102 Codelab을 위해 완료된 코드입니다.
필수 파일 준비
Awesome Drawing Quiz는 프로젝트를 컴파일하고 실행하는 데 필요한 여러 오픈소스 코드를 사용합니다.
터미널을 열고 저장소 루트 디렉터리로 이동합니다. 그런 다음 터미널에서 ./gradlew :prepareThirdPartyFiles (Windows의 경우 gradlew.bat :prepareThirdPartyFiles)를 실행하여 필요한 파일을 프로젝트에 복사합니다.
시작 앱 가져오기
Unity를 실행하고 시작 화면에서 '열기'를 선택합니다. 그런 다음 다운로드한 코드에서 101-complete_and_102-base 디렉터리를 선택합니다.
이제 Unity에서 프로젝트가 열립니다.
Google 모바일 광고 Unity 플러그인 추가
Unity 앱에 AdMob 광고를 게재하려면 프로젝트에 Google 모바일 광고 Unity 플러그인을 추가해야 합니다.
- Google 모바일 광고 Unity 플러그인 3.18.1 패키지를 다운로드합니다. (이 Codelab은 다른 버전의 플러그인과 호환되지 않을 수 있습니다.)
- Awesome Drawing Quiz Unity 프로젝트 프로젝트에서 Assets > Import Package > Custom Package로 이동합니다.
- 다운로드한 프로젝트로 GoogleMobileAds.unitypackage를 가져옵니다.
AdMob 앱 ID도 설정해야 합니다. Unity 편집기의 메뉴에서 Assets(애셋) > Google Mobile Ads(Google 모바일 광고) > Settings(설정)를 선택합니다.

Google AdMob 섹션의 Enabled(사용 설정됨) 체크박스를 클릭하여 AdMob을 사용 설정합니다. 그런 다음 AdMob 앱 ID를 다음과 같이 입력합니다.
- Android:
ca-app-pub-3940256099942544~3048611032 - iOS:
ca-app-pub-3940256099942544~2753522596

Unity 프로젝트에 Firebase 구성 파일 추가
- Awesome Drawing Quiz 프로젝트의 개요 화면에서 설정 아이콘을 클릭합니다.

- 일반 탭에서 각 Android 및 iOS 앱을 선택하여 google-service.json (Android용) 및 GoogleService-Info.plist (iOS용) 파일을 다운로드합니다.
- 구성 파일을 Unity 프로젝트의
Assets 폴더로 이동합니다.

Firebase 애널리틱스 SDK 추가
- Firebase Unity SDK 5.5.0을 다운로드하고 원하는 위치에 압축을 풉니다. (이미 SDK를 다운로드한 경우 이 단계를 건너뛰세요.)
- Awesome Drawing Quiz Unity 프로젝트를 열고 Assets > Import Package > Custom Package로 이동합니다.
- 압축을 푼 SDK에서 Firebase 애널리틱스 SDK (
dotnet4/FirebaseAnalytics.unitypackage)를 가져옵니다. - 'Unity 패키지 가져오기' 창에서 가져오기를 클릭합니다.
3. 콘솔에서 Firebase 프로젝트 열기
다음 단계로 넘어가기 전에 AdMob+Firebase 101 Codelab의 'Firebase 프로젝트 설정' 단계에서 만든 프로젝트를 Firebase Console에서 엽니다.

4. 앱 이벤트의 유입경로 만들기
앱 내 사용자 활동을 추적하기 위해 추가한 앱 이벤트가 있을 수 있습니다. 각 앱 이벤트의 보고서를 읽으면 총수, 사용자당 평균수, 인구통계 등 이벤트와 관련된 세부정보를 확인할 수 있습니다.
하지만 특정 이벤트에 집중하는 대신 일련의 이벤트의 완료율을 확인하려면 어떻게 해야 할까요? Firebase용 Google 애널리틱스에서 유입경로를 사용하여 연속된 앱 이벤트의 완료율을 시각화하고 최적화할 수 있습니다.
유입경로 만들기
유입경로를 만들려면 다음 절차를 따르세요.
- Firebase Console로 이동하여 이전에 만든 Awesome Drawing Quiz 프로젝트를 선택합니다.
- 퍼널을 클릭합니다.
- 새 유입경로를 클릭합니다.
- 유입경로의 이름과 설명을 입력합니다.
- 유입경로의 단계로 사용할 처음 두 이벤트를 선택합니다.
- 단계를 추가할 때마다 다른 이벤트 추가를 클릭하고 이벤트를 선택합니다.
- 만들기를 클릭합니다.
위 단계에 따라 다음 유입경로를 만듭니다.
#1 유입경로 이름: 레벨 성공률 이벤트: level_start, level_success
#2 유입경로 이름: 보상형 광고 완료율 이벤트: ad_reward_prompt, ad_reward_impression, ad_reward
#3 유입경로 이름: 게임 완료율 이벤트: game_start, game_complete
유입경로 분석 보기
퍼널을 만든 후 Firebase Console의 퍼널 메뉴에서 액세스할 수 있습니다. 목록에서 유입경로 이름을 클릭하면 각 유입경로의 세부 분석을 확인할 수 있습니다.

예를 들어 레벨 성공률을 클릭합니다. 다음과 같이 유입경로 세부정보가 표시됩니다.

위 스크린샷에서 레벨을 시작한 후 (level_start 이벤트 트리거) 레벨을 완료한 사용자 (level_success 이벤트 트리거)의 비율을 확인할 수 있습니다. 여기에서 46.2% 의 사용자가 레벨을 완료했음을 확인할 수 있습니다.
이벤트 수를 클릭하면 다음과 같이 이벤트 수를 기반으로 한 측정항목이 표시됩니다.

위 스크린샷의 측정항목에 따르면 기간 동안 시도 횟수 (level_start 이벤트 트리거)는 116회, 완료 횟수 (level_success 이벤트 트리거)는 57회입니다.
이벤트를 기준으로 한 완료율(49.1%)이 사용자를 기준으로 한 완료율(46.2%)보다 약간 높으므로 다른 사용자보다 실적이 좋은 사용자가 몇 명 있다고 할 수 있습니다.
5. 원격 구성을 앱에 통합
앱 이벤트와 유입경로를 기반으로 앱에 관한 유용한 정보를 얻을 수 있으므로 앱을 최적화하는 것이 좋습니다. 일반적으로 앱에서 매개변수 값을 미세 조정하는 것이 포함됩니다. 이러한 매개변수의 값을 수정하려면 변경사항이 사용자에게 적용될 수 있도록 앱을 업데이트해야 합니다.
Firebase의 원격 구성을 사용하면 앱 업데이트 없이 이러한 값을 조정할 수 있으므로 사용자가 업데이트를 다운로드하도록 강제하지 않고도 앱 동작을 변경할 수 있습니다.
이 Codelab에서는 원격 구성을 사용하여 앱 업데이트 없이 보상 금액 (리워드 동영상 광고 시청 후 공개할 글자 수)을 조정하는 방법을 알아봅니다.
Firebase 원격 구성 SDK 추가
- Firebase Unity SDK 5.5.0을 다운로드하고 원하는 위치에 압축을 풉니다.
- Awesome Drawing Quiz Unity 프로젝트를 열고 Assets > Import Package > Custom Package로 이동합니다.
- 압축을 푼 SDK에서 원격 구성 SDK (
dotnet4/FirebaseRemoteConfig.unitypackage)를 가져옵니다. - 'Unity 패키지 가져오기' 창에서 가져오기를 클릭합니다.
Firebase.RemoteConfig 가져오기
정규화된 이름을 사용하지 않고도 Firebase.RemoteConfig의 유형을 사용할 수 있도록 Main.cs를 수정합니다.
Scenes/Main.cs
...
using AwesomeDrawingQuiz.Game;
// TODO: Import Firebase.RemoteConfig (102)
using Firebase.RemoteConfig;
namespace AwesomeDrawingQuiz.Scene {
...
}
원격 구성 값 초기화 및 가져오기
Main.cs에서 InitAndFetchRemoteConfig() 메서드를 수정하여 다음과 같이 원격 구성 인스턴스를 초기화합니다. GameSettings.KEY_REWARD_AMOUNT에는 원격 구성의 매개변수 이름이 저장됩니다. (이 Codelab에서 곧 이 필드를 선언합니다.)
Scenes/Main.cs
private Task InitAndFetchRemoteConfig() {
// TODO: Initialize and Fetch values from the Remote Config (102)
Dictionary<string, object> defaults = new Dictionary<string, object>();
defaults.Add(GameSettings.KEY_REWARD_AMOUNT, 1);
FirebaseRemoteConfig.SetDefaults(defaults);
if (Debug.isDebugBuild) {
ConfigSettings config = new ConfigSettings();
config.IsDeveloperMode = true;
FirebaseRemoteConfig.Settings = config;
return FirebaseRemoteConfig.FetchAsync(System.TimeSpan.Zero);
} else {
return FirebaseRemoteConfig.FetchAsync();
}
}
개발 프로세스를 지원하기 위해 디버그 모드에서 서버의 최신 값을 가져오도록 FirebaseRemoteConfig 인스턴스가 구성되어 있습니다. (IsDeveloperMode = true승 FetchAsync(System.TimeSpan.Zero)패)
가져온 원격 구성 값 활성화
원격 구성 값을 가져왔으면 앱에서 사용할 수 있도록 값을 활성화해야 합니다. 다음과 같이 ActivateRemoteConfigValues() 메서드를 수정합니다.
Scenes/Main.cs
private void ActivateRemoteConfigValues() {
// TODO: Activate fetched Remote Config values (102)
FirebaseRemoteConfig.ActivateFetched();
}
Start() 메서드 수정
앱이 실행될 때 앱이 원격 구성 값을 가져오고 활성화하도록 하려면 Main.cs 파일에서 Start() 메서드를 다음과 같이 수정합니다.
Scenes/Main.cs
void Start () {
...
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
...
}).ContinueWith(task => {
// TODO: Call InitAndFetchRemoteConfig() (102)
InitAndFetchRemoteConfig();
}).ContinueWith(task => {
// TODO: Call ActivateRemoteConfigValues() (102)
ActivateRemoteConfigValues();
// Enable 'Start a game' button
UnityMainThreadDispatcher.Instance()
.Enqueue(() => buttonStartGame.interactable = true);
});
#else
QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_MAIN);
// TODO: Call InitAndFetchRemoteConfig() (102)
InitAndFetchRemoteConfig().ContinueWith(task => {
// TODO: Call ActivateRemoteConfigValues() (102)
ActivateRemoteConfigValues();
});
#endif
}
원격 구성에서 리워드 금액 가져오기
원격 구성에서 리워드 금액을 가져오도록 GameSettings 클래스를 수정합니다.
Game/GameSettings.cs
// TODO: Import Firebase.RemoteConfig (102)
using Firebase.RemoteConfig;
namespace AwesomeDrawingQuiz.Game {
public class GameSettings {
...
// TODO: Apply reward amount from the Remote Config (102)
public const string KEY_REWARD_AMOUNT = "reward_amount";
public static GameSettings Instance {
get {
return instance;
}
}
...
public int RewardAmount {
get {
// TODO: Apply reward amount from the Remote Config (102)
return (int) FirebaseRemoteConfig.GetValue(KEY_REWARD_AMOUNT).LongValue;
}
private set { }
}
}
}
콘솔에서 원격 구성 매개변수 만들기
다음으로 보상 금액에 대한 새 원격 구성 매개변수를 만들어 즉시 값을 조정할 수 있습니다.
새 매개변수를 만들려면 Firebase Console로 이동한 후 이전에 만든 Awesome Drawing Quiz 프로젝트를 선택합니다. 원격 구성 -> 첫 번째 매개변수 추가 버튼을 클릭합니다.

매개변수 이름을 reward_amount로 지정하고 기본값을 1로 설정합니다. 그런 다음 매개변수 추가 버튼을 클릭합니다.

변경사항 게시 버튼을 클릭하여 변경사항을 사용자에게 적용합니다.

6. 원격 구성으로 앱 동작 변경
이제 앱 코드를 업데이트하지 않고도 Firebase 콘솔에서 Awesome Drawing Quiz의 리워드 금액을 구성할 수 있습니다.
이 섹션에서는 보상형 광고를 시청한 후 앱에서 힌트로 두 개의 문자를 더 표시하도록 리워드 금액을 1에서 2로 변경합니다.
reward_amount 매개변수의 기본값 업데이트
Firebase Console로 이동한 후 이전에 만든 Awesome Drawing Quiz 프로젝트를 선택합니다. 원격 구성을 클릭하고 목록에서 reward_amount을 클릭합니다. 그런 다음 기본값을 2로 변경하고 업데이트 버튼을 클릭합니다.

변경사항 게시 버튼을 클릭하여 변경사항을 사용자에게 적용합니다.

앱 동작 변경사항 확인
앱 동작 변경사항을 확인하려면 프로젝트를 다시 실행하세요. 리워드 광고 시청을 완료하면 이제 앱에서 원격 구성 콘솔에서 구성한 대로 두 글자를 보상으로 표시합니다.
보상형 광고를 시청하기 전 | 리워드로 두 글자를 추가로 공개 |
7. 리워드 금액을 최적화하는 실험 만들기
이제 앱 업데이트를 게시하지 않고도 리워드 금액을 변경할 수 있습니다. 하지만 변경된 양이 앱에 적합한지 어떻게 확인할 수 있을까요?
Firebase A/B 테스트를 사용하면 앱을 업데이트하거나 각 실험의 실적을 실행하고 추적하는 별도의 도구를 빌드하지 않고도 실험을 실행하여 앱의 전반적인 사용자 경험을 최적화할 수 있습니다.
실험 설계
새 실험을 만들기 전에 실험의 명확한 목표를 설정해야 합니다. 새 실험을 만들기 전에 다음 체크리스트를 확인하세요.
- 무엇: 무엇을 최적화하고 싶으신가요? (예: 게임 난이도, 광고 타이밍/노출 여부 등)
- 이유: 실험을 진행하는 비즈니스 목표는 무엇인가요? (예: 광고 수익 극대화, 유지율 증가 등)
- 대상: 실험 대상은 누구인가요? (예: 모든 사용자, 특정 사용자 잠재고객 등)
이 Codelab에서는 Awesome Drawing Quiz의 일일 사용자 참여도를 극대화하기 위해 리워드 금액 값을 최적화하는 실험을 만듭니다.
실험 만들기
Firebase Console에서 Awesome Drawing Quiz 프로젝트를 엽니다. A/B 테스트 메뉴를 선택한 다음 실험 만들기 버튼을 클릭합니다.
원격 구성을 선택하여 원격 구성 실험을 만듭니다.

다음 스크린샷과 같이 실험 이름을 '보상 금액'으로 지정합니다.

타겟팅 옵션을 구성합니다. 이 Codelab에서는 Awesome Drawing Quiz의 모든 사용자를 타겟팅합니다.

실험의 주요 목표는 일일 사용자 참여도를 극대화하는 최적의 값을 찾는 것이므로 일일 사용자 참여도를 추적할 기본 측정항목으로 선택합니다.

마지막으로 어떤 그룹의 실적이 더 우수한지 파악할 수 있도록 대조군과 변이 그룹을 설정합니다. 관리 그룹에서 reward_amount를 선택하고 값을 변경하지 않습니다. 변형 그룹의 이름을 '보상이 적음'으로 지정한 다음 reward_amount 값을 1로 변경합니다.

이 구성에서는 '보상이 적음' 그룹의 사용자는 보상으로 한 글자를 받고 대조군의 사용자는 보상으로 두 글자를 받습니다. 따라서 보상 금액이 사용자에게 미치는 영향을 확인할 수 있습니다.
검토 버튼을 클릭하면 다음과 같이 실험 개요가 표시됩니다.

실험 실행
실험 시작 버튼을 클릭하여 실험을 실행합니다. 실험이 시작된 후에는 실험 구성을 변경할 수 없습니다.

8. 실험 관리
실험 진행 상황 보기
Firebase Console의 A/B 테스팅 메뉴에서 실험 진행 상황을 확인할 수 있습니다. 다음 스크린샷을 참고하세요. 카드에서 지난 30분 동안 실험에 참여한 사용자 수도 확인할 수 있습니다.

목록에서 실험을 클릭하면 실험 세부정보를 확인할 수 있습니다. 실험에서 최우수 대안 (실적이 가장 우수한 대안)을 선언할 수 있을 때까지 '최우수 대안을 선언하기에는 아직 이릅니다' 메시지가 표시됩니다.

실험이 일정 기간 실행되면 개선 개요 섹션에 실험 중에 수집된 데이터가 표시되기 시작합니다. 각 변형의 실적을 비교하여 어떤 변형이 더 나은지 확인할 수 있습니다. 다음 스크린샷은 개선 개요 섹션의 예시를 보여줍니다.

개선사항 개요 섹션 아래의 표에서 실험의 목표 측정항목 세부정보와 실험에서 추적되는 추가 측정항목을 확인할 수 있습니다. 다음 스크린샷은 측정항목 세부정보 섹션의 예시를 보여줍니다.

리더를 모든 사용자에게 출시
가장 우수한 대안이 판명될 때까지 실험이 충분히 진행되었으면 이를 사용자 전체에 적용할 수 있습니다. A/B 테스팅에서 우열이 명확히 가려지면 우수한 변수를 모든 사용자에게 출시하도록 권장합니다.

실험에서 확실한 최적의 구성을 파악할 수 없더라도 여러 구성 중 하나를 모든 사용자에게 적용할 수 있습니다.
실험 세부정보 화면에서 컨텍스트 메뉴 (
)를 클릭한 다음 변형 적용을 클릭합니다.

모든 사용자에게 출시할 변형을 선택한 다음 원격 구성에서 검토 버튼을 클릭하여 원격 구성을 변경하기 전에 변경사항을 검토합니다.

초안에 문제가 없는지 확인한 후 변경사항 게시 버튼을 클릭하여 모든 사용자에게 변경사항을 적용합니다.

9. 완료
AdMob+Firebase 102 Unity Codelab을 완료했습니다. 이 Codelab의 완성된 코드는
102-complete 폴더에서 확인할 수 있습니다.

