시스템 속성
1. 모든 이벤트에 포함되는 시스템 속성
다음 시스템 속성은 iOS SDK의 모든 이벤트(자동 수집 이벤트 포함)에 포함되는 시스템 속성입니다
| 속성 이름 | 한국어 이름 | 속성 타입 | 수집 시점 | 설명 |
|---|---|---|---|---|
| #ip | IP 주소 | 텍스트 | 서버 측 수집 | 유저의 IP 주소로, AE는 이를 기반으로 유저의 지리적 위치 정보를 가져옵니다 |
| #country | 국가 | 텍스트 | 서버 측 수집 | 유저가 있는 국가로, IP 주소를 기반으로 생성됩니다 |
| #country_code | 국가 코드 | 텍스트 | 서버 측 수집 | 유저가 있는 국가의 국가 코드(ISO 3166-1 alpha-2, 즉 영문 대문자 2자리)로, IP 주소를 기반으로 생성됩니다 |
| #province | 성(Province) | 텍스트 | 서버 측 수집 | 유저가 있는 성/주로, IP 주소를 기반으로 생성됩니다 |
| #city | 도시 | 텍스트 | 서버 측 수집 | 유저가 있는 도시로, IP 주소를 기반으로 생성됩니다 |
| #os_version | OS 버전 | 텍스트 | 초기화 시 1회 수집 | OS 버전 번호 표시(예: 15.6.1) |
| #manufacturer | 디바이스 제조사 | 텍스트 | 초기화 시 1회 수집 | 유저 디바이스의 제조사(예: Apple) |
| #os | 운영 체제 | 텍스트 | 초기화 시 1회 수집 | 예: iOS 등 |
#device_id | 디바이스 ID | 텍스트 | 초기화 시 1회 수집 | 유저의 디바이스 ID로, iOS에서는 유저의 IDFV 또는 UUID를 사용합니다 |
| #device_type | 디바이스 타입 | 텍스트 | 초기화 시 1회 수집 | 디바이스 타입(예: iPhone, iPad) |
| #screen_height | 화면 높이 | 숫자 | 초기화 시 1회 수집 | 유저 디바이스의 화면 높이(예: 667 등) |
| #screen_width | 화면 너비 | 숫자 | 초기화 시 1회 수집 | 유저 디바이스의 화면 너비(예: 375 등) |
| #device_model | 디바이스 모델 | 텍스트 | 초기화 시 1회 수집 | 유저 디바이스의 모델(예: iPhone12,8 등) |
| #app_version | APP 버전 | 텍스트 | 초기화 시 1회 수집 | APP의 버전 |
| #bundle_id | 앱 고유 식별자 | 텍스트 | 초기화 시 1회 수집 | 앱 패키지 이름 |
#lib | SDK 타입 | 텍스트 | 이벤트 발생 시 수집 | 연동한 SDK의 타입(예: Android, iOS 등) |
| #lib_version | SDK 버전 | 텍스트 | 이벤트 발생 시 수집 | 연동한 SDK의 버전 |
#network_type | 네트워크 상태 | 텍스트 | 초기화 시 1회 수집, 네트워크 상태 변경 시 수집 | 이벤트를 업로드할 때의 네트워크 상태(예: WIFI, 3G, 4G 등) |
#carrier | 네트워크 통신사 | 텍스트 | 초기화 시 1회 수집 | 유저 디바이스의 네트워크 통신사(예: China Mobile, China Telecom 등). iOS 16.4 이후 시스템 버전에서는 이 필드를 수집하지 않습니다 |
#zone_offset | 시간대 오프셋 | 숫자 | 이벤트 발생 시 수집 | 데이터 시간과 UTC 시간의 차이(시간 단위) |
#install_time | 앱 설치 시간 | 시간 | 초기화 시 1회 수집 | 유저가 앱을 설치한 시간으로, 값은 시스템에서 가져옵니다 |
| #simulator | 에뮬레이터 여부 | 불리언 | 초기화 시 1회 수집 | 디바이스가 에뮬레이터인지 여부 true/false |
#ram | 디바이스 메모리 상태 | 텍스트 | 이벤트 발생 시 수집 | 유저 디바이스의 현재 남은 메모리와 전체 메모리, 단위 GB, 예: 1.4/2.4 |
#disk | 디바이스 저장 공간 상태 | 텍스트 | 이벤트 발생 시 수집 | 유저 디바이스의 현재 남은 저장 공간과 전체 저장 공간, 단위 GB, 예: 30/200 |
#fps | 디바이스 FPS | 숫자 | 이벤트 발생 시 수집 | 유저 디바이스의 현재 초당 프레임 수, 예: 60. (v3.2.0 이후 버전의 SDK는 기본적으로 이 필드를 수집하지 않음) |
#system_language | 시스템 언어 | 텍스트 | 이벤트 발생 시 수집 | 유저 디바이스의 시스템 언어(ISO 639-1, 즉 영문 소문자 2자리), 예: zh, en 등 |
| #relaunched_in_background | 앱 백그라운드 여부 | 불리언 | 이벤트 발생 시 수집 | APP이 백그라운드에서 시작되면 수집된 이벤트에서 이 속성은 YES입니다. APP이 정상적으로 시작되면 수집된 이벤트에 이 속성이 포함되지 않습니다. |
2. 자동 수집 이벤트의 시스템 속성
다음 시스템 속성은 각 자동 수집 이벤트에만 있는 시스템 속성입니다
- APP 시작 이벤트(ta_app_start)의 시스템 속성
| 속성 이름 | 한국어 이름 | 속성 타입 | 설명 |
|---|---|---|---|
| #resume_from_background | 백그라운드에서 깨웠는지 여부 | 불리언 | APP을 열었는지 백그라운드에서 깨웠는지를 나타냅니다. 값이 true이면 백그라운드에서 깨운 것이고, false이면 직접 연 것입니다 |
#start_reason | 앱 시작 출처 | 텍스트 | APP 시작 사유를 나타내며, 내용은 JSON 문자열입니다. 현재 deeplink, 푸시, 3dtouch 시작 사유 수집을 지원합니다. 데이터 예시: {url:"thinkingdata://","data":{}} |
#background_duration | 백그라운드 체류 시간 | 숫자 | 두 번의 start 이벤트가 발생한 구간 동안 앱이 백그라운드에 머문 시간으로, 단위는 초입니다 |
- APP 종료 이벤트(ta_app_end)의 시스템 속성
| 속성 이름 | 한국어 이름 | 속성 타입 | 설명 |
|---|---|---|---|
| #duration | 이벤트 시간 | 숫자 | 이번 APP 방문(시작부터 종료까지)의 시간을 나타내며, 단위는 초입니다 |
- APP 페이지 조회 이벤트(ta_app_view)의 시스템 속성
| 속성 이름 | 한국어 이름 | 속성 타입 | 설명 |
|---|---|---|---|
#title | 페이지 제목 | 텍스트 | View Controller의 제목으로, controller.navigationItem.title 속성 값을 사용합니다 |
| #screen_name | 페이지 이름 | 텍스트 | View Controller의 클래스 이름 |
#url | 페이지 주소 | 텍스트 | 현재 페이지의 주소이며, getScreenUrl을 호출하여 url을 설정해야 합니다 |
#referrer | 이전 주소 | 텍스트 | 이동 전 페이지의 주소이며, 이동 전 페이지에서 getScreenUrl을 호출하여 url을 설정해야 합니다 |
- APP 컨트롤 클릭 이벤트(ta_app_click)의 시스템 속성
| 속성 이름 | 한국어 이름 | 속성 타입 | 설명 |
|---|---|---|---|
| #title | 페이지 제목 | 텍스트 | View Controller의 제목으로, controller.navigationItem.title 속성 값을 사용합니다 |
| #screen_name | 페이지 이름 | 텍스트 | View Controller의 클래스 이름 |
#element_id | 요소 ID | 텍스트 | 컨트롤의 ID로, thinkingAnalyticsViewID로 설정해야 합니다 |
| #element_type | 요소 유형 | 텍스트 | 컨트롤의 유형 |
| #element_selector | 요소 선택자 | 텍스트 | 컨트롤의 viewPath를 이어 붙인 값 |
#element_position | 요소 위치 | 컨트롤의 위치 정보로, 컨트롤 타입이 UITableView 또는 UICollectionView인 경우에만 존재하며 컨트롤이 클릭된 위치를 나타냅니다. 값은 그룹 번호(Section):행 번호(Row)입니다 | |
| #element_content | 요소 내용 | 텍스트 | 컨트롤의 내용 |
- APP 크래시 이벤트(ta_app_crash)의 시스템 속성
| 속성 이름 | 표시 이름 | 속성 타입 | 설명 |
|---|---|---|---|
| #app_crashed_reason | 예외 정보 | 텍스트 | 문자 타입이며 크래시 발생 시의 스택 트레이스를 기록 |
3. 기타 시스템 속성
위에서 언급한 시스템 속성 외에도 일부 시스템 속성은 해당 인터페이스를 호출해야 기록됩니다.
| 속성 이름 | 표시 이름 | 속성 타입 | 설명 |
#duration | 이벤트 지속 시간 | 숫자 | 타이머 기능 인터페이스 timeEvent를 호출해야 하며, 이벤트 소요 시간을 기록합니다. 단위는 초입니다 |
| #background_duration | 백그라운드 체류 시간 | 숫자 | 타이머 기능 인터페이스 timeEvent를 호출해야 하며, 이벤트 발생 구간 동안 앱이 백그라운드에 머문 시간을 기록합니다. 단위는 초입니다 |
4. 시스템 속성 가져오기
v2.7.0 이상 버전에서는 getPresetProperties 메서드를 호출하여 시스템 속성을 가져올 수 있습니다.
서버 측 트래킹에 App 측의 일부 시스템 속성이 필요한 경우 이 메서드로 App 측의 시스템 속성을 가져와 서버 측에 전달할 수 있습니다.
- Objective-C
- Swift
//속성 객체 가져오기
TDPresetProperties *presetProperties = [TDAnalytics getPresetProperties];
//이벤트 시스템 속성 생성
NSDictionary *properties = [presetProperties toEventPresetProperties];
/*
{
"#carrier": "中国电信",
"#os": "iOS",
"#device_id": "A8B1C00B-A6AC-4856-8538-0FBC642C1BAD",
"#screen_height": 2264,
"#bundle_id": "com.sw.thinkingdatademo",
"#manufacturer": "Apple",
"#device_model": "iPhone7",
"#screen_width": 1080,
"#system_language": "zh",
"#os_version": "10",
"#network_type": "WIFI",
"#zone_offset": 8,
}
*/
//특정 시스템 속성 가져오기
NSString *bundle_id = presetProperties.bundle_id;//패키지명
NSString *os = presetProperties.os;//OS 타입(예: iOS)
NSString *system_language = presetProperties.system_language;//휴대폰 시스템 언어 타입
NSNumber *screen_width = presetProperties.screen_width;//화면 너비
NSNumber *screen_height = presetProperties.screen_height;//화면 높이
NSString *device_model = presetProperties.device_model;//디바이스 모델
NSString *device_id = presetProperties.device_id;//디바이스 고유 식별자
NSString *carrier = presetProperties.carrier;//휴대폰 SIM 카드 통신사 정보. 듀얼 SIM 듀얼 스탠바이인 경우 기본 SIM의 통신사 정보를 가져옴
NSString *manufacture = presetProperties.manufacturer;//휴대폰 제조사(예: Apple)
NSString *network_type = presetProperties.network_type;//네트워크 타입
NSString *os_version = presetProperties.os_version;//시스템 버전 번호
NSNumber *zone_offset = presetProperties.zone_offset;//시간대 오프셋
let presetProperties = TDAnalytics.getPresetProperties();
//이벤트 시스템 속성 생성
let properties = presetProperties.toEventPresetProperties();
//특정 시스템 속성 가져오기
let bundle_id = presetProperties.bundle_id;//패키지명
let os = presetProperties.os;//OS 타입(예: iOS)
let system_language = presetProperties.system_language;//휴대폰 시스템 언어 타입
let screen_width = presetProperties.screen_width;//화면 너비
let screen_height = presetProperties.screen_height;//화면 높이
let device_model = presetProperties.device_model;//디바이스 모델
let device_id = presetProperties.device_id;//디바이스 고유 식별자
let carrier = presetProperties.carrier;//휴대폰 SIM 카드 통신사 정보. 듀얼 SIM 듀얼 스탠바이인 경우 기본 SIM의 통신사 정보를 가져옴
let manufacture = presetProperties.manufacturer;//휴대폰 제조사(예: Apple)
let network_type = presetProperties.network_type;//네트워크 타입
let os_version = presetProperties.os_version;//시스템 버전 번호
let zone_offset = presetProperties.zone_offset;//시간대 오프셋 값
IP, 국가, 도시 정보는 서버 측에서 해석하여 생성하며, 클라이언트에서는 이러한 속성을 가져오는 인터페이스를 제공하지 않습니다
5. 시스템 속성 수집 비활성화
일부 시나리오에서는 규정 준수, 실제 비즈니스 요구 등을 고려하여 특정 시스템 속성의 수집을 금지해야 할 수 있습니다. 프로젝트의 info.plist 파일에 TDDisPresetProperties 필드(타입은 Array)를 추가하면, 추가한 필드에 해당하는 시스템 속성은 업로드되지 않습니다. 예를 들어 @"#fps", @"#ram", @"#disk", @"#start_reason", @"#simulator" 등의 시스템 속성을 차단하려면 아래 그림과 같이 설정합니다:
디바이스 ID 수집을 차단한 상태에서 최초 이벤트를 사용해야 하는 경우 반드시 first_check_id 속성을 입력하십시오

