Unity 애플리케이션 연동¶
Unity 애플리케이션의 메트릭 데이터를 수집하여 애플리케이션 성능을 시각적으로 분석합니다.
읽기 경로¶
- 최초 연동: 먼저 빠른 시작을 참조하세요.
- 전체 연동: 이 문서를 계속 읽으세요.
- 파라미터 상세: SDK 초기화, RUM 설정, Log 설정, Trace 설정을 확인하세요.
- 커스텀 기능: 사용자 정의 태그 사용, 데이터 수집 사용자 정의 규칙, 데이터 수집 마스킹을 확인하세요.
- 고급 시나리오: 네이티브 및 Unity 하이브리드 개발을 확인하세요.
- 문제 해결: 트러블슈팅을 확인하세요.
사전 조건¶
참고
RUM Headless 서비스를 이미 활성화한 경우, 사전 조건이 자동으로 구성되므로 바로 애플리케이션을 연동할 수 있습니다.
- DataKit 설치
- RUM 수집기 설정
- DataKit이 공개 네트워크에서 접근 가능하고 IP 지리 정보 데이터베이스가 설치되도록 설정
애플리케이션 연동¶
- RUM > 새 애플리케이션 > Android/iOS로 이동합니다.
- Unity Android 및 Unity iOS용으로 각각 두 개의 애플리케이션을 생성하여 Android 및 iOS 플랫폼의 RUM 데이터를 각각 수신합니다.
- 각 플랫폼의 애플리케이션에 해당하는 애플리케이션 이름과 애플리케이션 ID를 입력합니다.
-
애플리케이션 연동 방식을 선택합니다:
- 공용 네트워크 DataWay: DataKit 수집기 설치 없이 RUM 데이터를 직접 수신합니다.
- 로컬 환경 배포: 사전 조건을 충족한 후 RUM 데이터를 수신합니다.
설치¶
소스 코드 주소: https://github.com/GuanceCloud/datakit-unity
Demo 주소: https://github.com/GuanceCloud/datakit-unity/blob/dev/Assets/Scenes
- 최신 ft-sdk-unity.unitypackage를 다운로드합니다.
Assets->Import Package->Custom Package...를 통해ft-sdk-unity.unitypackage를 임포트합니다.- JSON 파싱 서드파티 라이브러리
"com.unity.nuget.newtonsoft-json"를 추가합니다.Package Manager->Add Package by name ...에서 완료할 수 있습니다. FTSDK.prefab을 첫 번째 씬 페이지로 드래그하고,FTSDK.cs의_InitSDK메서드 내에서 SDK를 초기화합니다.FTViewObserver.prefab을 다른 씬 페이지로 드래그하여 페이지View의 생명주기와 애플리케이션 절전 및 깨우기를 모니터링합니다.Application.logMessageReceived를 통해 Unity 크래시 데이터 및 일반 로그 데이터를 수신하고 변환합니다. 예제는 빠른 시작 및 데이터 수집 사용자 정의 규칙을 참조하세요.
Assets/Plugins
├── Android
│ ├── FTUnityBridge.java // Android 브리지
│ ├── InnerClassProxy.java // Android 내부 설정 프록시
│ ├── ft-sdk-release.aar // Android SDK
│ ├── gson-2.8.5.jar // Android SDK 종속 서드파티 라이브러리
├── iOS
│ ├── FTMobileSDK.xcframework // iOS SDK
│ ├── FTUnityBridge.mm // iOS 브리지
├── FTSDK.cs // FTSDK.prefab 바인딩 스크립트
├── FTSDK.prefab // SDK 초기화 프리팹
├── FTUnityBridge.cs // Unity 브리지 (iOS, Android 등 플랫폼 메서드 연결)
├── FTViewObserver.cs // FTViewObserver.prefab 바인딩 스크립트
├── FTViewObserver.prefab // View 페이지 모니터링 프리팹
├── UnityMainThreadDispatcher.cs // UnityMainThreadDispatcher.prefab 바인딩 스크립트
├── UnityMainThreadDispatcher.prefab // 메인 스레드 소비 큐 프리팹
- 네이티브 Android 및 iOS 프로젝트에 이미 네이티브 SDK가 통합된 경우, 중복 설정을 피하기 위해
_InitSDK메서드를 주석 처리해야 합니다. 자세한 시나리오는 네이티브 및 Unity 하이브리드 개발을 참조하세요. - iOS Plugin Inspector 설정:
FTMobileSDK.xcframework는 동적 라이브러리이므로Add to Embedded Binaries를 선택해야 합니다. 이 옵션을 선택하면 Unity가 Xcode 프로젝트 옵션을 설정하여 플러그인 파일을 최종 애플리케이션 번들에 복사합니다.
이미 네이티브 SDK를 통합한 경우, Android의
gson-2.8.5.jar,ft-sdk-release.aar및 iOS의FTMobileSDK.framework는 Unity 프로젝트에서 제거할 수 있습니다. Android의 OkHttp 요청 및 시작 시간 기능은ft-plugin과 함께 사용해야 합니다. 자세한 설정은 Android SDK를 참조하세요.
초기화 설명¶
최소 초기화 예제는 빠른 시작을 참조하세요.
전체 SDKConfig 파라미터 설명은 SDK 초기화를 참조하세요.
상세 설정 항목¶
데이터 수집 사용자 정의 규칙¶
Unity SDK는 현재 주로 수동 메서드 호출을 통해 사용자 정의 RUM 데이터 수집을 구현합니다.
Action¶
사용 방법¶
/// <summary>
/// Action 추가
/// </summary>
/// <param name="actionName">action 이름</param>
/// <param name="actionType">action 유형</param>
public static void StartAction(string actionName, string actionType)
/// <summary>
/// Action 추가
/// </summary>
/// <param name="actionName">action 이름</param>
/// <param name="actionType">action 유형</param>
/// <param name="property">추가 속성 파라미터</param>
public static void StartAction(string actionName, string actionType, Dictionary<string, object> property)
/// <summary>
/// Action 추가
/// </summary>
/// <param name="actionName">action 이름</param>
/// <param name="actionType">action 유형</param>
public static void AddAction(string actionName, string actionType)
/// <summary>
/// Action 추가
/// </summary>
/// <param name="actionName">action 이름</param>
/// <param name="actionType">action 유형</param>
/// <param name="property">추가 속성 파라미터</param>
public static void AddAction(string actionName, string actionType, Dictionary<string, object> property)
코드 예제¶
View¶
사용 방법¶
/// <summary>
/// View 시작
/// </summary>
/// <param name="viewName">현재 페이지 이름</param>
public static void StartView(string viewName)
/// <summary>
/// View 시작
/// </summary>
/// <param name="viewName">현재 페이지 이름</param>
/// <param name="property">추가 속성 파라미터</param>
public static void StartView(string viewName, Dictionary<string, object> property)
/// <summary>
/// View 종료
/// </summary>
public static void StopView()
/// <summary>
/// View 종료
/// </summary>
/// <param name="property">추가 속성 파라미터</param>
public static void StopView(Dictionary<string, object> property)
코드 예제¶
Resource¶
사용 방법¶
/// <summary>
/// resource 시작
/// </summary>
/// <param name="resourceId">리소스 ID</param>
public static async Task StartResource(string resourceId)
/// <summary>
/// resource 시작
/// </summary>
/// <param name="resourceId">리소스 ID</param>
/// <param name="property">추가 속성 파라미터</param>
public static async Task StartResource(string resourceId, Dictionary<string, object> property)
/// <summary>
/// resource 종료
/// </summary>
/// <param name="resourceId">리소스 ID</param>
public static async Task StopResource(string resourceId)
/// <summary>
/// resource 종료
/// </summary>
/// <param name="resourceId">리소스 ID</param>
/// <param name="property">추가 속성 파라미터</param>
public static async Task StopResource(string resourceId, Dictionary<string, object> property)
/// <summary>
/// 네트워크 전송 콘텐츠 및 메트릭 추가
/// </summary>
/// <param name="resourceId">리소스 ID</param>
/// <param name="resourceParams">데이터 전송 콘텐츠</param>
public static async Task AddResource(string resourceId, ResourceParams resourceParams)
ResourceParams¶
| 메서드명 | 유형 | 필수 | 설명 |
|---|---|---|---|
| url | string | 예 | URL 주소 |
| requestHeader | string | 아니요 | 요청 헤더 파라미터, 형식 제한 없음 |
| responseHeader | string | 아니요 | 응답 헤더 파라미터, 형식 제한 없음 |
| responseConnection | string | 아니요 | 응답 connection |
| responseContentType | string | 아니요 | 응답 ContentType |
| responseContentEncoding | string | 아니요 | 응답 ContentEncoding |
| resourceMethod | string | 아니요 | 요청 메서드 (GET, POST 등) |
| responseBody | string | 아니요 | 응답 본문 내용 |
코드 예제¶
FTUnityBridge.StartResource(resourceId);
FTUnityBridge.StopResource(resourceId);
ResourceParams resourceParams = new ResourceParams();
resourceParams.url = url;
resourceParams.requestHeader = client.DefaultRequestHeaders.ToDictionary(header => header.Key, header => string.Join(",", header.Value));
resourceParams.responseHeader = response.Headers.ToDictionary(header => header.Key, header => string.Join(",", header.Value));
resourceParams.resourceStatus = (int)response.StatusCode;
resourceParams.responseBody = responseData;
resourceParams.resourceMethod = "GET";
FTUnityBridge.AddResource(resourceId, resourceParams);
Error¶
사용 방법¶
/// <summary>
/// 오류 정보 추가
/// </summary>
/// <param name="log">로그</param>
/// <param name="message">메시지</param>
public static async Task AddError(string log, string message)
/// <summary>
/// 오류 정보 추가
/// </summary>
/// <param name="log">로그</param>
/// <param name="message">메시지</param>
/// <param name="property">추가 속성 파라미터</param>
public static async Task AddError(string log, string message, Dictionary<string, object> property)
코드 예제¶
void OnEnable()
{
Application.logMessageReceived += LogCallBack;
}
void OnDisable()
{
Application.logMessageReceived -= LogCallBack;
}
void LogCallBack(string condition, string stackTrace, LogType type)
{
if (type == LogType.Exception)
{
FTUnityBridge.AddError(stackTrace, condition);
}
}
LongTask¶
사용 방법¶
/// <summary>
/// 장시간 소요 작업 추가
/// </summary>
/// <param name="log">로그 내용</param>
/// <param name="duration">지속 시간 (나노초)</param>
public static async Task AddLongTask(string log, long duration)
/// <summary>
/// 장시간 소요 작업 추가
/// </summary>
/// <param name="log">로그 내용</param>
/// <param name="duration">지속 시간 (나노초)</param>
/// <param name="property">추가 속성 파라미터</param>
public static async Task AddLongTask(string log, long duration, Dictionary<string, object> property)
코드 예제¶
고급 시나리오¶
자주 묻는 질문¶
전역 변수 추가 시 필드 충돌 방지¶
사용자 정의 필드와 SDK 데이터의 충돌을 방지하려면 태그 이름에 프로젝트 약어 접두사를 추가하는 것이 좋습니다. 예: custom_tag_name. 프로젝트에서 사용하는 key 값은 소스 코드에서 확인할 수 있습니다. SDK 전역 변수에 RUM, Log와 동일한 변수가 있는 경우, RUM, Log가 SDK의 전역 변수를 덮어씁니다.
