Overview
com.111percent.gamebase.analytics.event-logging
com.111percent.gamebase.analytics.event-logging-appsflyer
com.111percent.analytics.event-logging-firebase-analytics
com.111percent.gamebase.analytics.event-logging-google-cloud-logging
클라이언트 사이드에서 발생하는 이벤트를 수집하여 지표 분석에 활용할 수 있는 패키지예요. 유저 상호작용과 앱 내 활동을 로깅하여 데이터 기반의 의사결정을 지원해요.
Initialize
1. EventLoggerManager.Initialize
- 모듈 사용에 필요한 초기화, 최초 한 번 호출 필수
- ⚠️ Firebase 초기화 이후에 호출하기
- 초기화 권장 방안 (Sample Code)
- TitleScene에서 호출하기
public static void InitializeEventLoggerManager()
{
// LoggerOptions 기본값 설정하기
// 설정한 옵션에 따라 기본값으로 어떤 Logger들로 이벤트 로그를 보낼지 결정한다.
// recommended:
// - production 환경에서는 기본적으로 GCL로 로그 보내기
// - production 모드가 아니면 Debug를 위해 Console Log도 같이 출력 권장
// - appsflyer, firebaseAnalytics는 항상 보낼 로그가 아니기 때문에. 기본값에 포함하지 않음.
var defaultLoggerOptions = PercentConfig.Env.IsProduction ?
LoggerOptions.GoogleCloudLogging :
LoggerOptions.GoogleCloudLogging | LoggerOptions.Console;
// event logging에 필요한 환경값
var config = new EventLogClientConfig(defaultLoggerOptions: defaultLoggerOptions);
// 이벤트 로거 구현체들을 등록한다.
var eventLoggers = new IEventLogger[]
{
new ConsoleEventLogger(),
new AppsFlyerEventLogger(),
new GoogleCloudLoggingEventLogger(),
new FirebaseAnalyticsEventLogger(),
};
EventLoggerManager.Initialize(eventLoggers: eventLoggers, clientConfig: config);
}
2. EventLoggerManager.SetUserId
🗝️ Percent Auth V2 버전 2.4.1 이상을 사용할 경우, userId가 자동 세팅되므로 호출하지 않아도 됩니다.
Percent Auth 버전이 2.4.1 아래인 경우
- 로그인 이후에 호출, userId 등록하기
// 로그인 이후에 playerId를 등록해줍니다. string playerId = "로그인 후에 플레이어ID 등록하세요"; EventLoggerManager.SetUserId(playerId);
SendEvent
1. EventLoggerManager.SendGameEvent
게임 이벤트 로그를 전송하는 메서드예요.
*게임 이벤트 로그: message 필드의 값이 “GAME_EVENT”로 지정된 이벤트 로그
Default Logger Options로 이벤트 로그 보내기
- 기본적으로
EventLoggerManager.Initialize
에 전달했던 defaultLoggerOptions을 통해 로거 대상을 선정해요.
// Default Logger Options로 이벤트 로그 보내기.
// EventLoggerManager.Initialize에서 전달한 default logger options을 대상으로 이벤트 로그를 보내는 방법이에요.
EventLoggerManager.SendGameEvent("test-event", new Dictionary<string, object>()
{
{ "key1", 1 },
{ "key2", 2 },
});
(Optional) Logger Options를 수동으로 설정하여 이벤트 로그 보내기
- 필요에 따라 수동으로 로거 대상을 선정할 수 있어요. loggerOptions 값을 파라미터로 전달해요.
// Logger Options를 수동으로 설정하여 이벤트 로그 보내기.
// GCL과 AppsFlyer를 대상으로 이벤트 로그를 보내는 방법이에요.
LoggerOptions loggerOptions = LoggerOptions.GoogleCloudLogging | LoggerOptions.AppsFlyer;
EventLoggerManager.SendGameEvent("test-event", new Dictionary<string, object>()
{
{ "key1", 1 },
{ "key2", 2 },
}, loggerOptions);
// only AppsFlyer에 이벤트 로그를 보내는 방법이에요.
EventLoggerManager.SendGameEvent("test-event", new Dictionary<string, object>()
{
{ "key1", 1 },
{ "key2", 2 },
}, LoggerOptions.AppsFlyer);
2. 자동 트래킹 옵션 (Optional)
Assets > Percent > Resources > EventLoggingAutoTrackOptions.asset
이벤트 로그 자동 전송 목록
- session_start
- session_end
- session_pause
- session_resume
옵션의 기본값들은 true이며, 체크 해제한 이벤트는 자동으로 전송하지 않습니다.
이벤트 로그를 게임서버 사이드에서 직접 전송하고 싶은 경우에만 해제해주세요.
3. 패키지 자체적으로 보내는 필드 (User Property)
필드명 | 설명 | 예 |
---|---|---|
message | 이벤트의 유형을 나타내는 메시지 | "GAME_EVENT" |
game_id | 게임의 고유 식별자 | "10003" |
env | 실행 환경 (dev, qa, prod) | "dev" |
event_type | 이벤트 전송 주체를 나타내는 숫자 코드 | |
(서버: “1”, 클라이언트: “2”) | "2" | |
log_api_ver | 이벤트 로그 API의 버전 | "1.0.0" |
user_id | 사용자 식별자 | “123e4567e89b12d3a456426614174000” |
country | 사용자의 국가 코드 | "KR" |
version | 애플리케이션의 버전 | "1.51.0" |
os | 운영 체제 혹은 플랫폼 정보 | "ANDROID" |
time | 이벤트가 기록된 시간 (UTC) | "2023-07-25T05:51:59.3048080Z" |
uuid | 기기 식별자 | “5D9D429B-4114-5ADC-B0B1-0A290418255D” |
session_id | 세션 id | “00EAF89CE7860DE3” |
session_time | 세션 경과 시간 (milli seconds) | 5234 |
params.network_status | 이벤트 전송 시점의 네트워크 상태 (0: 연결됨 1: 끊김) | “0” |
이벤트 로그 데이터 타입 가이드 및 확인하기
이벤트 로그 가이드를 확인해주세요.
Event Log Raw Samples
Console Event Logger
{
"message": "GAME_EVENT",
"event_name": "test-event",
"game_id": "10003",
"env": "dev",
"event_type": "2",
"log_api_ver": "1.0.0",
"user_id": "",
"country": "KR",
"version": "1.51.0",
"os": "EDITOR",
"time": "2023-07-25T05:51:59.3048080Z",
"uuid": "5D9D429B-4114-5ADC-B0B1-0A290418255D",
"session_id": "272e55474b2c4d19b02a9ca930ee943b",
"session_time": 5234,
"params": [
{
"name": "key1",
"value": 1
},
{
"name": "key2",
"value": 2
},
{
"name": "network_status",
"value": 0
}
]
}