저번에 Gemini로 대충 만들고 넘어간 분석 및 로그 기능에 대해서 공부를 좀 해보려고 한다.
| Gemini 형님이 짜준 코드 |
|---|
![]() |
1. 비동기 환경 검사 (CheckAndFixDependenciesAsync)
FirebaseApp.CheckAndFixDependenciesAsync()
역할: 이 코드가 가장 핵심. 유저의 기기(안드로이드/iOS)에 Firebase가 작동하기 위한 필수 구글 서비스가 설치되어 있는지 확인.
비동기(Async): 이 작업은 네트워크나 로컬 환경을 조회해야 하므로 시간이 걸릴 수 있음. 그래서 메인 게임 화면이 멈추지 않게 백그라운드에서 실행.
2. 작업 완료 후 처리 (ContinueWith)
.ContinueWith(task => { ... })
역할: "검사가 끝나면 이 중괄호{} 안의 내용을 실행해라"라는 뜻.
task.Result: 검사 결과가 성공인지 실패인지 정보를 담고 있음.
3. 상태 체크 및 초기화 (DependencyStatus.Available)
if (dependencyStatus == DependencyStatus.Available) {
FirebaseApp app = FirebaseApp.DefaultInstance;
Debug.Log("Firebase가 준비되었습니다!");
}
역할: 기기 환경에 문제가 없다면 DefaultInstance(기본 설정값)를 호출하여 앱과 Firebase 서버를 연결.
중요: 이 과정이 없으면 이후에 호출하는 LogEvent는 아무리 호출해도 무시되거나 에러 발생.
4. 이벤트 전송 (LogEvent)
초기화 직후에 두 가지 타입의 로그를 보내고 있음.
FirebaseAnalytics.EventAppOpen:"app_open"이라고 적는 것보다 오타 위험이 적고, Firebase가 내부적으로 "이건 앱이 켜진 거구나"라고 바로 인식하는 표준 규격."test_event_success":가장 핵심이 되는 기능. 단순히 "클릭했다"가 아니라, 의미 있는 데이터를 남기는 것이 포인트.
LogEvent(string name): 파라미터 없이 사건 발생만 기록.
app_open (앱 실행), tutorial_begin (튜토리얼 시작), login (로그인 버튼 클릭)LogEvent(string name, Parameter[] parameters): 상세 정보를 담아 보냄.
level_up: 유저가 레벨업했을 때 (새 레벨 수치 포함)spend_virtual_currency: 게임 머니를 썼을 때 (아이템 이름, 소모량 포함)ad_impression: 광고를 끝까지 봤을 때 (광고 종류 포함)"누가" 이 행동을 했는지 그룹화하여 분석할 때 사용.
SetUserId(string id): 유저 한 명을 고유하게 식별.
SetUserProperty(string name, string value): 유저에게 '꼬리표'를 붙임.
user_type: "paying" (과금러) vs "free" (무과금)ab_test_group: "A_Group" vs "B_Group" (업데이트 전 테스트 그룹 구분)last_stage: "Stage_5" (유저가 현재 머물고 있는 최고 단계)분석 대시보드를 깔끔하게 유지하기 위한 설정들
LogScreenView: 현재 유저가 보고 있는 화면 이름을 강제로 지정.
SetSessionTimeoutDuration(long milliseconds): 세션 기준을 정함.
직접 이름을 짓지 않고 Firebase가 미리 정의해둔 상수를 쓰는 것이 대시보드 리포트 생성에 유리
| 상수 이름 | 실제 의미 | 활용도 |
|---|---|---|
| EventLevelUp | 레벨 달성 | 유저 성장 속도 파악 |
| EventEarnVirtualCurrency | 재화 획득 | 게임 내 인플레이션 모니터링 |
| EventPurchase | 실제 결제 | 매출 분석 (가장 중요) |
| EventAppUpdate | 앱 업데이트 | 구버전 유저 비율 파악 |