콘텐츠로 이동

Unity 애플리케이션 연동


Unity 애플리케이션의 메트릭 데이터를 수집하여 애플리케이션 성능을 시각적으로 분석합니다.

읽기 경로

사전 조건

참고

RUM Headless 서비스를 이미 활성화한 경우, 사전 조건이 자동으로 구성되므로 바로 애플리케이션을 연동할 수 있습니다.

애플리케이션 연동

  1. RUM > 새 애플리케이션 > Android/iOS로 이동합니다.
  2. Unity Android 및 Unity iOS용으로 각각 두 개의 애플리케이션을 생성하여 Android 및 iOS 플랫폼의 RUM 데이터를 각각 수신합니다.
  3. 각 플랫폼의 애플리케이션에 해당하는 애플리케이션 이름과 애플리케이션 ID를 입력합니다.
  4. 애플리케이션 연동 방식을 선택합니다:

    • 공용 네트워크 DataWay: DataKit 수집기 설치 없이 RUM 데이터를 직접 수신합니다.
    • 로컬 환경 배포: 사전 조건을 충족한 후 RUM 데이터를 수신합니다.

설치

소스 코드 주소: https://github.com/GuanceCloud/datakit-unity

Demo 주소: https://github.com/GuanceCloud/datakit-unity/blob/dev/Assets/Scenes

  1. 최신 ft-sdk-unity.unitypackage를 다운로드합니다.
  2. Assets -> Import Package -> Custom Package...를 통해 ft-sdk-unity.unitypackage를 임포트합니다.
  3. JSON 파싱 서드파티 라이브러리 "com.unity.nuget.newtonsoft-json"를 추가합니다. Package Manager -> Add Package by name ...에서 완료할 수 있습니다.
  4. FTSDK.prefab을 첫 번째 씬 페이지로 드래그하고, FTSDK.cs_InitSDK 메서드 내에서 SDK를 초기화합니다.
  5. FTViewObserver.prefab을 다른 씬 페이지로 드래그하여 페이지 View의 생명주기와 애플리케이션 절전 및 깨우기를 모니터링합니다.
  6. 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 프로젝트 옵션을 설정하여 플러그인 파일을 최종 애플리케이션 번들에 복사합니다.

unity_ios_plugin_embedded

이미 네이티브 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)

코드 예제

FTUnityBridge.StartAction("click", "test");

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)

코드 예제

FTUnityBridge.StartView("TEST_VIEW_ONE");

FTUnityBridge.StopView();

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)

코드 예제

FTUnityBridge.AddLongTask("long task test", 100002);

고급 시나리오

자주 묻는 질문

전역 변수 추가 시 필드 충돌 방지

사용자 정의 필드와 SDK 데이터의 충돌을 방지하려면 태그 이름에 프로젝트 약어 접두사를 추가하는 것이 좋습니다. 예: custom_tag_name. 프로젝트에서 사용하는 key 값은 소스 코드에서 확인할 수 있습니다. SDK 전역 변수에 RUM, Log와 동일한 변수가 있는 경우, RUM, Log가 SDK의 전역 변수를 덮어씁니다.

기타

문서 평가

이 페이지가 도움이 되었나요?