# 클라이언트 SDK 자주 발생하는 문제
# 1. 클라이언트 SDK의 전송 규칙은 무엇인가요?
네이티브 클라이언트 SDK(Unity, Unreal, Flutter 포함) 데이터는 먼저 로컬 데이터베이스에 캐시되고, 다음 상황에서 데이터가 전송됩니다:
- 앱이 백그라운드로 전환될 때
- 30초마다 한 번씩 (TE 시스템에서 설정 가능)
- 30개 이상의 캐시 데이터가 있을 때 한 번씩 (TE 시스템에서 설정 가능)
- flush 인터페이스를 호출할 때
미니 앱 및 JavaScript SDK는 로컬 캐시 없이 실시간으로 데이터를 전송합니다.
# 2. 디바이스 ID 값의 로직은 무엇인가요?
네이티브 클라이언트 SDK(Unity, Unreal, Flutter 포함)의 디바이스 ID 값 로직은 다음과 같습니다.
- Android: Android ID
Android 8.0 이전 시스템에서는 Android ID가 디바이스의 고유 식별자입니다. 초기화 또는 출하 시 설정 복원으로 변경됩니다. 모든 앱이 공유합니다. Android 8.0 이후에는 앱 서명 키, 사용자, 디바이스의 각 조합마다 고유의 ANDROID_ID 값이 있습니다. 따라서, 같은 디바이스에서 실행되지만 다른 서명 키를 사용하는 앱은 같은 Android ID를 인식하지 않게 됩니다(동일 사용자일지라도). 특수한 경우: 사용자가 8.0 이전 디바이스에 앱을 설치한 후, 나중에 앱을 삭제하고 8.0으로 업그레이드한 후에 앱을 재설치할 경우, Android ID는 이전과 다릅니다. 재설치가 없는 경우 Android ID는 변경되지 않습니다.
- iOS: 처음에는 IDFV를 획득하고, 획득할 수 없는 경우 랜덤한 UUID를 사용합니다. 처음 획득한 디바이스 ID 값은 키체인에 저장되며, 그 후의 IDFV가 변경되어도 변경되지 않습니다.
미니앱, JavaScript 인터페이스는 비슷한 디바이스 ID를 획득할 수 없으며, 랜덤으로 생성된 ID를 디바이스 ID로 사용합니다. 사용자가 캐시를 삭제할 경우, 디바이스 ID가 변경됩니다.
# 3. 클라이언트 SDK에서 지원하는 시스템의 최소 버전은 무엇인가요?
Android 4.0과 iOS 8.0입니다.
# 4. 데이터 전송 문제는 어떻게 확인하나요?
일반적인 문제는 클라이언트 로그를 사용하여 빠르게 식별할 수 있습니다. 각 SDK 가이드에서 클라이언트 로그를 활성화하는 방법이 소개되어 있습니다.
Android에서는 enableTrackLog
인터페이스를 호출하여 클라이언트 측 로그를 활성화할 수 있습니다. ThinkingAnalytics
를 통해 Android SDK 로그를 필터링할 수 있습니다.
TDAnalytics.enableTrackLog(true);
iOS에서는 setLogLevel
인터페이스를 호출하여 로그 출력을 활성화하고, THINKING을 통해 iOS SDK 로그를 필터 처리할 수 있습니다.
[TDAnalytics setLogLevel:TDLoggingLevelDebug]
로그를 활성화한 후, 기술 지원 엔지니어에게 로그를 공유하여 문제 식별에 도움을 받을 수 있습니다.
전송한 주소가 올바른지 확실하지 않은 경우 인터페이스를 확인하고 전송한 주소의 도달 가능성을 확인할 수 있습니다. https://YOUR_RECEIVER_URL/health-check에 접속하면 페이지에 ok가 반환되며, 수신자 주소가 올바르게 구성되었음을 나타냅니다.
# 5. Unity SDK를 사용하여 데이터를 전송할 때 주의할 사항은 무엇인가요?
- SDK의 초기화는 Awake()에서 이루어지므로, Awake에서 호출을 트리거할 수 없습니다.
- 기본적으로, 모든 인터페이스는 메인 스레드에서만 호출될 수 있습니다.
- 앱이 포어그라운드로 들어가거나 백그라운드로 돌아가는 것은 Android 시스템의 컴포넌트 라이프사이클을 통해 판단합니다. 하지만, Unity는 프로그램 시작 시 SDK가 초기 설정될 것을 보장할 수 없기 때문에, 백그라운드로 돌아갈 때 처음 시작 이벤트를 판단할 수 있는 가능성이 있습니다. 현재 시점에서는, 처음으로 백그라운드로 돌아갈 때 ta_app_start를 추가합니다 (전송은 약간 지연되지만, 이벤트 시간 #event_time은 정확하며, 이후 분석에는 영향을 주지 않습니다).
# 6. 크래시 이벤트에는 무엇이 포함되나요? 크래시 이벤트 수집 방법은?
클라이언트 SDK는 일부 크래시 로그 수집을 지원합니다. SDK를 초기 설정한 후, 앱 크래시의 자동 수집을 활성화해야 합니다. 크래시 이벤트에 해당하는 이벤트 이름은 ta_app_crash입니다.
크래시 이벤트 수집을 트리거하는 상황:
- Android: VM에서 catch되지 않는 예외가 발생했습니다
- iOS:
- Unix 이상 신호: SIGABRT, SIGILL, SIGSEGV, SIGFPE, SIGBUS
- NSException 예외
- Unity 엔진에서 C# 예외의 수집
← H5와 APP SDK의 연동 디버깅 →