콘텐츠로 이동

RUM 구성

RUM 초기화 구성

FTSdk.initRUMWithConfig(
        new FTRUMConfig()
            .setRumAppId(RUM_APP_ID)
            .setEnableTraceUserView(true)
            .setDeviceMetricsMonitorType(DeviceMetricsMonitorType.ALL.getValue())
            .setEnableTraceUserAction(true)
            .setEnableTraceUserResource(true)
            .setEnableTrackAppUIBlock(true)
            .setEnableTrackAppCrash(true)
            .setEnableTrackAppANR(true)
            .setExtraMonitorTypeWithError(ErrorMonitorType.ALL.getValue())
);
FTSdk.initRUMWithConfig(
    FTRUMConfig()
        .setRumAppId(RUM_APP_ID)
        .setEnableTraceUserView(true)
        .setDeviceMetricsMonitorType(DeviceMetricsMonitorType.ALL.getValue())
        .setEnableTraceUserAction(true)
        .setEnableTraceUserResource(true)
        .setEnableTrackAppUIBlock(true)
        .setEnableTrackAppCrash(true)
        .setEnableTrackAppANR(true)
        .setExtraMonitorTypeWithError(ErrorMonitorType.ALL.getValue())
)
메서드명 타입 필수 의미
setRumAppId String RUM AppId를 설정합니다. RUM appid를 설정해야 RUM 수집 기능이 활성화됩니다. appid 획득 방법
setSamplingRate Float 아니요 수집률을 설정합니다. 범위는 [0,1]이며, 0은 수집하지 않음, 1은 전체 수집을 의미하며 기본값은 1입니다. 동일한 session_id 아래의 모든 View, Action, LongTask, Error 데이터에 적용됩니다.
setSessionErrorSampleRate Float 아니요 오류 수집률을 설정합니다. 세션이 setSamplingRate에 의해 샘플링되지 않은 경우, 세션 중 오류가 발생하면 오류 발생 1분 전 범위의 데이터를 수집할 수 있습니다. 범위는 [0,1]이며, 0은 수집하지 않음, 1은 전체 수집을 의미하며 기본값은 0입니다. 동일한 session_id 아래의 모든 View, Action, LongTask, Error 데이터에 적용됩니다. ft-sdk 1.6.11 이상에서 지원합니다.
setEnableTrackAppCrash Boolean 아니요 앱 크래시 로그를 업로드할지 여부를 설정합니다. 기본값은 false이며, 활성화하면 오류 분석에 오류 스택 데이터가 표시됩니다. 크래시 로그의 난독화된 내용 변환에 대한 자세한 내용은 심볼 파일 업로드를 참조하세요. ft-sdk 1.5.1 이상 버전에서는 extraLogCatWithJavaCrash, extraLogCatWithNativeCrash를 통해 Java Crash 및 Native Crash에서 logcat 표시 여부를 설정할 수 있습니다.
setIssueDataProvider FTIssueDataProvider 아니요 자동 수집된 Java/Native Crash 및 watchdog/native ANR Error에 검증된 사용자 정의 필드를 추가합니다. 기록 복구 데이터를 포함하며, 기본값은 설정하지 않음입니다. ft-sdk 1.7.5 이상에서 지원합니다. 자세한 내용은 Crash/ANR 사용자 정의 필드를 참조하세요.
setExtraMonitorTypeWithError Array 아니요 보조 모니터링 정보를 설정하여 RUM 크래시 데이터에 추가 모니터링 데이터를 첨부합니다. ErrorMonitorType.BATTERY는 배터리 잔량, ErrorMonitorType.MEMORY는 메모리 사용량, ErrorMonitorType.CPU는 CPU 점유율이며, 기본값은 설정하지 않음입니다.
setDeviceMetricsMonitorType Array 아니요 View 모니터링 정보를 설정합니다. View 주기 동안 모니터링 데이터를 추가합니다. DeviceMetricsMonitorType.BATTERY는 현재 페이지의 최대 전류 출력 상황을 모니터링하고, DeviceMetricsMonitorType.MEMORY는 현재 애플리케이션의 메모리 사용량을 모니터링하며, DeviceMetricsMonitorType.CPU는 CPU 점프 횟수를 모니터링하고, DeviceMetricsMonitorType.FPS는 화면 프레임 속도를 모니터링합니다. 모니터링 주기는 DetectFrequency.DEFAULT 500ms, DetectFrequency.FREQUENT 100ms, DetectFrequency.RARE 1초 중에서 선택 가능하며, 기본값은 설정하지 않음입니다.
setEnableTrackAppANR Boolean 아니요 ANR 수집을 활성화할지 여부를 설정합니다. 기본값은 false입니다. ft-sdk 1.7.5부터 Android 11(API 30) 이상에서는 프로세스 후속 시작 시 ApplicationExitInfo를 통해 치명적 ANR을 복구하며, 비치명적 실시간 ANR은 수집하지 않습니다. Android 10(API 29) 이하에서는 계속해서 실시간 watchdog/native ANR 수집을 사용합니다. extraLogCatWithANR은 API 29 이하의 실시간 수집 경로에만 사용됩니다.
setEnableTrackAppUIBlock Boolean, long 아니요 UI 끊김 감지를 활성화할지 여부를 설정합니다. 기본값은 false이며, ft-sdk 1.6.4 이상 버전에서는 blockDurationMs를 통해 감지 시간 범위([100,), 단위 밀리초)를 제어할 수 있으며, 기본값은 1초입니다.
setEnableTraceUserAction Boolean 아니요 사용자 작업을 자동으로 추적할지 여부를 설정합니다. 현재는 사용자 시작 및 클릭 작업만 지원합니다. 이 구성은 ft-plugin에 의존하며, 기본값은 false입니다.
setEnableTraceUserView Boolean 아니요 사용자 페이지 작업을 자동으로 추적할지 여부를 설정합니다. 이 구성은 ft-plugin에 의존하며, 기본값은 false입니다.
setEnableTraceUserViewInFragment Boolean 아니요 Fragment 유형 페이지 데이터를 자동으로 추적할지 여부를 설정합니다. 이 구성은 ft-plugin에 의존하며, 기본값은 false입니다. ft-sdk 1.6.11 이상에서 지원합니다.
setEnableTraceUserResource Boolean 아니요 사용자 네트워크 요청을 추적할지 여부를 설정합니다. OkHttp만 지원하며, 기본값은 false입니다. 일반 HTTP 요청의 자동 수집은 ft-plugin에 의존합니다. ft-sdk >= 1.7.5ft-plugin >= 1.3.8을 함께 사용하면 newWebSocket()의 핸드셰이크 Resource도 자동으로 수집합니다. FTWebSocket을 통해 명시적으로 통합할 수도 있습니다.
setEnableResourceHostIP Boolean 아니요 요청 대상 도메인 이름 주소의 IP를 수집할지 여부를 설정합니다. 적용 범위: EnableTraceUserResource가 true인 기본 수집에만 영향을 미칩니다. 사용자 정의 Resource 수집의 경우 FTResourceEventListener.FTFactory(true)를 사용하여 이 기능을 활성화해야 합니다. 또한 단일 OkHttp는 동일한 도메인 이름에 대한 IP 캐시 메커니즘이 있으므로, 동일한 OkHttpClient에서 서버 측 IP가 변경되지 않는 경우 한 번만 생성됩니다.
setResourceUrlHandler Callback 아니요 필터링할 Resource 조건을 설정합니다. 기본값은 필터링하지 않음입니다.
setOkHttpEventListenerHandler Callback 아니요 ASM에서 전역 OkHttp EventListener를 설정합니다. 기본값은 설정하지 않음입니다.
setOkHttpResourceContentHandler Callback 아니요 ASM에서 전역 FTResourceInterceptor.ContentHandlerHelper를 설정합니다. 기본값은 설정하지 않음이며, ft-sdk 1.6.7 이상에서 지원합니다. 사용자 정의 Resource를 참조하세요.
addGlobalContext Dictionary 아니요 사용자 모니터링 데이터 소스 구분을 위한 사용자 정의 태그를 추가합니다. 추적 기능을 사용해야 하는 경우 매개변수 keytrack_id, value는 임의의 숫자 값입니다. 추가 규칙에 대한 자세한 내용은 여기를 참조하세요.
setRumCacheLimitCount int 아니요 로컬 캐시 RUM 제한 개수 [10_000,)를 설정합니다. 기본값은 100_000이며, ft-sdk 1.6.6 이상에서 지원합니다.
setEnableTraceWebView Boolean 아니요 Android SDK를 통한 WebView 데이터 수집을 활성화할지 여부를 설정합니다. 기본값은 true이며, ft-sdk 1.6.12 이상에서 지원합니다.
setAllowWebViewHost Array 아니요 데이터 추적을 허용할 WebView host 주소를 설정합니다. null이면 전체 수집이며, 기본값은 null입니다. ft-sdk 1.6.12 이상에서 지원합니다. 이 메서드는 더 이상 사용되지 않으며, ft-sdk 1.7.5부터는 FTSDKConfig.setAllowWebViewHost를 사용하여 WebView RUM 및 Log를 통합 구성하세요.
setViewActivityTrackingHandler FTViewActivityTrackingHandler 아니요 Activity 뷰의 추적 방식을 사용자 정의하는 데 사용됩니다. Activity 수명 주기 이벤트가 발생하면 이 핸들러가 호출되어 해당 Activity를 추적하는 방법을 결정합니다. 기본값은 처리하지 않음이며, ft-sdk 1.6.13 이상에서 지원합니다.
setViewFragmentTrackingHandler FTViewFragmentTrackingHandler 아니요 Fragment 뷰의 추적 방식을 사용자 정의하는 데 사용됩니다. Fragment 수명 주기 이벤트가 발생하면 이 핸들러가 호출되어 해당 Fragment를 추적하는 방법을 결정합니다. 기본값은 처리하지 않음이며, ft-sdk 1.6.13 이상에서 지원합니다.
setActionTrackingHandler FTActionTrackingHandler 아니요 사용자 작업의 추적 방식을 사용자 정의하는 데 사용됩니다. 사용자가 작업을 수행하면 이 핸들러가 호출되어 해당 작업을 추적하는 방법을 결정합니다. 기본값은 처리하지 않음이며, ft-sdk 1.6.13 이상에서 지원합니다.

WebSocket 핸드셰이크 Resource

ft-sdk >= 1.7.5ft-plugin >= 1.3.8을 함께 사용할 때 FTRUMConfig.setEnableTraceUserResource(true)를 활성화하면 OkHttp newWebSocket() 요청에 대해 핸드셰이크 Resource가 자동으로 한 번 수집됩니다.

ft-sdk만 1.7.5로 업그레이드하고 ft-plugin 1.3.7을 계속 사용해도 빌드 및 실행에는 문제가 없지만, 1.3.7에서는 WebSocket 핸드셰이크를 자동으로 차단하지 않습니다. 이 경우 FTWebSocket.newWebSocket() 또는 FTWebSocket.wrap()을 사용하여 명시적으로 통합할 수 있습니다. 호출 지점을 수정할 수 없거나 WebSocket.Factory를 주입할 수 없는 타사 라이브러리의 경우 여전히 ft-plugin >= 1.3.8로 업그레이드해야 합니다.

이 Resource는 핸드셰이크 성공, 서버 거부 또는 실패 시 종료되며, WebSocket 연결 지속 시간은 통계에 포함되지 않고 메시지 내용도 수집하지 않습니다. 기존 Resource URL 필터링 및 RUM 샘플링 규칙은 계속 적용됩니다. 데이터에는 다음 필드가 포함됩니다.

  • resource_type=websocket
  • resource_websocket_collection_level=handshake
  • resource_websocket_handshake_state: success, rejected 또는 failed 값 중 하나

Crash/ANR 사용자 정의 필드

ft-sdk >= 1.7.5에서는 FTRUMConfig.setIssueDataProvider(FTIssueDataProvider)를 통해 자동 수집된 Crash 및 ANR RUM Error에 사용자 정의 필드를 추가할 수 있습니다.

FTRUMConfig config = new FTRUMConfig()
    .setEnableTrackAppCrash(true)
    .setEnableTrackAppANR(true)
    .setIssueDataProvider(issue -> {
        Map<String, Object> fields = new HashMap<>();
        fields.put("business_scene", sceneStore.current());
        fields.put("historical_issue", issue.isHistorical());
        return fields;
    });
val config = FTRUMConfig()
    .setEnableTrackAppCrash(true)
    .setEnableTrackAppANR(true)
    .setIssueDataProvider { issue ->
        mapOf(
            "business_scene" to sceneStore.current(),
            "historical_issue" to issue.isHistorical
        )
    }

FTIssueDataProvider.provideAdditionalFields(FTIssueInfo)는 Error 구성 시 동기적으로 호출되며 동시에 실행될 수 있습니다. 구현체는 스레드 안전성을 보장하고 I/O를 피해야 하며 10ms 이내에 반환해야 합니다. Provider를 설정한다고 해서 Crash 또는 ANR 수집이 자동으로 활성화되지는 않으며, 해당 수집 항목을 별도로 활성화해야 합니다.

  • Provider가 트리거되는 것은 자동 수집된 Java/Native Crash, watchdog, native, ApplicationExitInfo ANR뿐입니다. 수동 Error, Network Error 및 WebView Error는 트리거되지 않습니다.
  • Native dump 또는 ApplicationExitInfo에서 복구된 데이터의 경우 FTIssueInfo.isHistorical()true를 반환합니다.
  • 반환 값은 문자열, 부울 값 및 제한된 숫자 값을 지원하며, 최대 50개 항목까지 확인됩니다. Key는 최대 100 UTF-8 바이트, 문자열 값은 최대 4096 UTF-8 바이트이며, 모든 필드의 합계는 25KiB를 초과할 수 없습니다.
  • 유효하지 않거나, 한도를 초과하거나, SDK 예약 필드 및 error. 또는 error_로 시작하는 Key는 무시됩니다. 비즈니스 측은 필드 내용이 개인정보 보호 및 규정 준수 요구 사항을 충족하는지 직접 확인해야 합니다.

RUM 수동 계측

FTRUMConfig에서 enableTraceUserAction, enableTraceUserView, enableTraceUserResource, setEnableTrackAppUIBlock, setEnableTrackAppCrashsetEnableTrackAppANR을 구성하여 Action, View, Resource, LongTask, Error의 자동 수집을 구현합니다. 사용자 정의 수집이 필요한 경우 FTRUMGlobalManager를 통해 수동으로 보고할 수 있습니다.

Action

사용 방법

/**
 * Action 추가
 *
 * @param actionName action 이름
 * @param actionType action 유형
 * @param property   추가 속성 매개변수(선택 사항)
 */
public void startAction(String actionName, String actionType, HashMap<String, Object> property)

/**
 * Action 추가, 이 유형의 데이터는 Error, Resource, LongTask 데이터와 연결할 수 없음
 *
 * @param actionName action 이름
 * @param actionType action 유형
 * @param duration   나노초, 지속 시간(선택 사항)
 * @param property   확장 속성(선택 사항)
 */
public void addAction(String actionName, String actionType, long duration, HashMap<String, Object> property)
/**
 * action 추가
 *
 * @param actionName action 이름
 * @param actionType action 유형
 * @param property   추가 속성 매개변수(선택 사항)
 */
fun startAction(actionName: String, actionType: String, property: HashMap<String, Any>)

/**
 * Action 추가
 *
 * @param actionName action 이름
 * @param actionType action 유형
 * @param duration   나노초, 지속 시간(선택 사항)
 * @param property   확장 속성(선택 사항)
 */
fun addAction(actionName: String, actionType: String, duration: Long, property: HashMap<String, Any>)

startAction은 내부적으로 소요 시간을 계산하는 알고리즘이 있으며, 계산 중에는 주변에서 발생하는 Resource, LongTask, Error 데이터와 데이터 연결을 시도합니다. 100ms의 빈번한 트리거 방지 기능이 설정되어 있으므로 사용자 작업 유형의 데이터에 사용하는 것이 좋습니다. 빈번하게 호출해야 하는 경우 addAction을 사용하세요. 이 데이터는 startAction과 충돌하지 않으며 현재 Resource, LongTask, Error와 데이터 연결을 수행하지 않습니다.

코드 예제

// 시나리오 1
FTRUMGlobalManager.get().startAction("login", "action_type");

// 시나리오 2: 동적 매개변수
HashMap<String, Object> map = new HashMap<>();
map.put("ft_key", "ft_value");
FTRUMGlobalManager.get().startAction("login", "action_type", map);

// 시나리오 1
FTRUMGlobalManager.get().addAction("login", "action_type");

// 시나리오 2: 동적 매개변수
HashMap<String, Object> map = new HashMap<>();
map.put("ft_key", "ft_value");
FTRUMGlobalManager.get().addAction("login", "action_type", map);
// 시나리오 1
FTRUMGlobalManager.get().startAction("login", "action_type")

// 시나리오 2: 동적 매개변수
val map = HashMap<String, Any>()
map["ft_key"] = "ft_value"
FTRUMGlobalManager.get().startAction("login", "action_type", map)

// 시나리오 1
FTRUMGlobalManager.get().addAction("login", "action_type")

// 시나리오 2: 동적 매개변수
val map = HashMap<String, Any>()
map["ft_key"] = "ft_value"
FTRUMGlobalManager.get().addAction("login", "action_type", map)

View

사용 방법

/**
 * view 시작
 *
 * @param viewName 현재 페이지 이름
 * @param property 추가 속성 매개변수(선택 사항)
 */
public void startView(String viewName, HashMap<String, Object> property)

/**
 * view 종료
 *
 * @param property 추가 속성 매개변수(선택 사항)
 */
public void stopView(HashMap<String, Object> property)

/**
 * 현재 view loading_time 지표 업데이트, 단위 나노초
 *
 * @param duration duration
 */
public void updateLoadTime(long duration)
/**
 * view 시작
 *
 * @param viewName 현재 페이지 이름
 * @param property 추가 속성 매개변수(선택 사항)
 */
fun startView(viewName: String, property: HashMap<String, Any>)

/**
 * view 종료
 *
 * @param property 추가 속성 매개변수(선택 사항)
 */
fun stopView(property: HashMap<String, Any>)

/**
 * 현재 view loading_time 지표 업데이트, 단위 나노초
 *
 * @param duration duration
 */
fun updateLoadTime(duration: Long)

코드 예제

@Override
protected void onResume() {
    super.onResume();

    // 시나리오 1
    FTRUMGlobalManager.get().startView("Current Page Name");

    // 시나리오 2: 동적 매개변수
    HashMap<String, Object> map = new HashMap<>();
    map.put("ft_key", "ft_value");
    map.put("ft_key_will_change", "ft_value");
    FTRUMGlobalManager.get().startView("Current Page Name", map)
}

@Override
protected void onPause() {
    super.onPause();

    // 시나리오 1
    FTRUMGlobalManager.get().stopView();

    // 시나리오 2 : 동적 매개변수
    HashMap<String, Object> map = new HashMap<>();
    map.put("ft_key_will_change", "ft_value_change"); // ft_key_will_change의 값은 stopView 시 ft_value_change로 업데이트됩니다.
    FTRUMGlobalManager.get().stopView(map);

}
override fun onResume() {
    super.onResume()

    // 시나리오 1
    FTRUMGlobalManager.get().startView("Current Page Name")

    // 시나리오 2: 동적 매개변수
    val map = HashMap<String, Any>()
    map["ft_key"] = "ft_value"
    map["ft_key_will_change"] = "ft_value"
    FTRUMGlobalManager.get().startView("Current Page Name", map)
}

override fun onPause() {
    super.onPause()

    // 시나리오 1
    FTRUMGlobalManager.get().stopView()

    // 시나리오 2 : 동적 매개변수
    val map = HashMap<String, Any>()
    map["ft_key_will_change"] = "ft_value_change" // ft_key_will_change 이 값은 stopView 시 ft_value_change로 변경됩니다.
    FTRUMGlobalManager.get().stopView(map)
}

Error

사용 방법

/**
 * 오류 정보 추가
 *
 * @param log       로그
 * @param message   메시지
 * @param errorType 오류 유형, ErrorType
 * @param state     프로그램 실행 상태
 * @param dateline  발생 시간, 나노초(선택 사항)
 * @param property  추가 속성(선택 사항)
 */
public void addError(String log, String message, long dateline, ErrorType errorType,
                     AppState state, HashMap<String, Object> property)

/**
 * 오류 정보 추가
 *
 * @param log       로그
 * @param message   메시지
 * @param errorType 오류 유형, String
 * @param state     프로그램 실행 상태
 * @param dateline  발생 시간, 나노초(선택 사항)
 * @param property  추가 속성(선택 사항)
 */
public void addError(String log, String message, long dateline, String errorType,
                     AppState state, HashMap<String, Object> property)
/**
 * 오류 정보 추가
 *
 * @param log       로그
 * @param message   메시지
 * @param errorType 오류 유형, ErrorType
 * @param state     프로그램 실행 상태
 * @param dateline  발생 시간, 나노초(선택 사항)
 * @param property  추가 속성(선택 사항)
 */
fun addError(log: String, message: String, dateline: Long, errorType: ErrorType, state: AppState, property: HashMap<String, Any>)

/**
 * 오류 정보 추가
 *
 * @param log       로그
 * @param message   메시지
 * @param errorType 오류 유형, String
 * @param state     프로그램 실행 상태
 * @param dateline  발생 시간, 나노초(선택 사항)
 * @param property  추가 속성(선택 사항)
 */
fun addError(log: String, message: String, dateline: Long, errorType: String, state: AppState, property: HashMap<String, Any>)

코드 예제

// 시나리오 1:
FTRUMGlobalManager.get().addError("error log", "error msg", ErrorType.JAVA, AppState.RUN);

// 시나리오 2: 지연하여 발생한 오류 기록, 여기서 시간은 일반적으로 오류가 발생한 시간입니다.
FTRUMGlobalManager.get().addError("error log", "error msg", 16789000000000000000L, ErrorType.JAVA, AppState.RUN);

// 시나리오 3:동적 매개변수
HashMap<String, Object> map = new HashMap<>();
map.put("ft_key", "ft_value");
FTRUMGlobalManager.get().addError("error log", "error msg", ErrorType.JAVA, AppState.RUN, map);
// 시나리오 1:
FTRUMGlobalManager.get().addError("error log", "error msg", ErrorType.JAVA, AppState.RUN)

// 시나리오 2: 지연하여 발생한 오류 기록, 여기서 시간은 일반적으로 오류가 발생한 시간입니다.
FTRUMGlobalManager.get().addError("error log", "error msg", 16789000000000000000, ErrorType.JAVA, AppState.RUN)

// 시나리오 3:동적 매개변수
val map = HashMap<String, Any>()
map["ft_key"] = "ft_value"
FTRUMGlobalManager.get().addError("error log", "error msg", ErrorType.JAVA, AppState.RUN, map)

LongTask

사용 방법

/**
 * 긴 작업 추가
 *
 * @param log      로그 내용
 * @param duration 지속 시간, 나노초
 * @param property 추가 속성 매개변수(선택 사항)
 */
public void addLongTask(String log, long duration, HashMap<String, Object> property)
/**
 * 긴 작업 추가
 *
 * @param log      로그 내용
 * @param duration 지속 시간, 나노초
 * @param property 추가 속성 매개변수(선택 사항)
 */
fun addLongTask(log: String, duration: Long, property: HashMap<String, Any>)

코드 예제

// 시나리오 1
FTRUMGlobalManager.get().addLongTask("error log", 1000000L);

// 시나리오 2: 동적 매개변수
HashMap<String, Object> map = new HashMap<>();
map.put("ft_key", "ft_value");
FTRUMGlobalManager.get().addLongTask("", 1000000L, map);
// 시나리오 1
FTRUMGlobalManager.get().addLongTask("error log", 1000000L)

// 시나리오 2: 동적 매개변수
val map = HashMap<String, Any>()
map["ft_key"] = "ft_value"
FTRUMGlobalManager.get().addLongTask("", 1000000L, map)

Resource

사용 방법

/**
 * resource 시작
 *
 * @param resourceId 리소스 ID
 * @param property   추가 속성 매개변수(선택 사항)
 */
public void startResource(String resourceId, HashMap<String, Object> property)

/**
 * resource 종료
 *
 * @param resourceId 리소스 ID
 * @param property   추가 속성 매개변수(선택 사항)
 */
public void stopResource(final String resourceId, HashMap<String, Object> property)

/**
 * 네트워크 전송 내용 설정
 *
 * @param resourceId  resourceId
 * @param params      params
 * @param netStatusBean netStatusBean
 */
public void addResource(String resourceId, ResourceParams params, NetStatusBean netStatusBean)
/**
 * resource 시작
 *
 * @param resourceId 리소스 ID(선택 사항)
 */
fun startResource(resourceId: String, property: HashMap<String, Any>)

/**
 * resource 종료
 *
 * @param resourceId 리소스 ID
 * @param property   추가 속성 매개변수(선택 사항)
 */
fun stopResource(resourceId: String, property: HashMap<String, Any>)

/**
 * 네트워크 전송 내용 설정
 *
 * @param resourceId  resourceId
 * @param params      params
 * @param netStatusBean netStatusBean
 */
fun addResource(resourceId: String, params: ResourceParams, netStatusBean: NetStatusBean)

코드 예제

// 시나리오 1
// 요청 시작
FTRUMGlobalManager.get().startResource("resourceId");

// ...

// 요청 종료
FTRUMGlobalManager.get().stopResource("resourceId");

// 마지막으로, 요청이 종료된 후 요청 관련 데이터 지표 전송
ResourceParams params = new ResourceParams();
params.setUrl("https://guance.com");
params.setResponseContentType(response.header("Content-Type"));
params.setResponseConnection(response.header("Connection"));
params.setResponseContentEncoding(response.header("Content-Encoding"));
params.setResponseHeader(response.headers().toString());
params.setRequestHeader(request.headers().toString());
params.setResourceStatus(response.code());
params.setResourceMethod(request.method());

NetStatusBean bean = new NetStatusBean();
bean.setTcpStartTime(60000000);
// ...

FTRUMGlobalManager.get().addResource("resourceId", params, bean);

// 시나리오 2 :동적 매개변수 사용
HashMap<String, Object> map = new HashMap<>();
map.put("ft_key", "ft_value");
map.put("ft_key_will_change", "ft_value");

FTRUMGlobalManager.get().startResource("resourceId", map);

// ...
HashMap<String, Object> map = new HashMap<>();
map.put("ft_key_will_change", "ft_value_change"); // ft_key_will_change 이 값은 stopResource 시 ft_value_change로 변경됩니다.
FTRUMGlobalManager.get().stopResource(uuid, map);
// 시나리오 1
// 요청 시작
FTRUMGlobalManager.get().startResource("resourceId")

// 요청 종료
FTRUMGlobalManager.get().stopResource("resourceId")

// 마지막으로, 요청이 종료된 후 요청 관련 데이터 지표 전송
val params = ResourceParams()
params.url = "https://guance.com"
params.responseContentType = response.header("Content-Type")
params.responseConnection = response.header("Connection")
params.responseContentEncoding = response.header("Content-Encoding")
params.responseHeader = response.headers.toString()
params.requestHeader = request.headers.toString()
params.resourceStatus = response.code
params.resourceMethod = request.method

val bean = NetStatusBean()
bean.tcpStartTime = 60000000
// ...
FTRUMGlobalManager.get().addResource("resourceId", params, bean)

// 시나리오 2 :동적 매개변수 사용
val map = hashMapOf<String, Any>(
    "ft_key" to "ft_value",
    "ft_key_will_change" to "ft_value"
)
FTRUMGlobalManager.get().startResource("resourceId", map)

// ...
val map = hashMapOf<String, Any>(
    "ft_key_will_change" to "ft_value_change"
)
// ft_key_will_change 이 값은 stopResource 시 ft_value_change로 변경됩니다.

FTRUMGlobalManager.get().stopResource(uuid, map)
메서드명 필수 의미 설명
NetStatusBean.fetchStartTime 아니요 요청 시작 시간
NetStatusBean.tcpStartTime 아니요 TCP 연결 시간
NetStatusBean.tcpEndTime 아니요 TCP 종료 시간
NetStatusBean.dnsStartTime 아니요 DNS 시작 시간
NetStatusBean.dnsEndTime 아니요 DNS 종료 시간
NetStatusBean.responseStartTime 아니요 응답 시작 시간
NetStatusBean.responseEndTime 아니요 응답 종료 시간
NetStatusBean.sslStartTime 아니요 SSL 시작 시간
NetStatusBean.sslEndTime 아니요 SSL 종료 시간
NetStatusBean.property 아니요 추가 속성
ResourceParams.url URL 주소
ResourceParams.requestHeader 아니요 요청 헤더 매개변수
ResourceParams.responseHeader 아니요 응답 헤더 매개변수
ResourceParams.responseConnection 아니요 응답 connection
ResourceParams.responseContentType 아니요 응답 ContentType
ResourceParams.responseContentEncoding 아니요 응답 ContentEncoding
ResourceParams.resourceMethod 아니요 요청 메서드 GET, POST 등
ResourceParams.responseBody 아니요 반환 body 내용
ResourceParams.property 아니요 추가 속성

사용자 정보 바인딩 및 해제

FTSdk를 사용하여 사용자 바인딩 및 해제를 수행합니다.

사용 방법

/**
 * 사용자 정보 바인딩
 *
 * @param id 사용자 ID
 */
public static void bindRumUserData(@NonNull String id)

/**
 * 사용자 정보 바인딩
 */
public static void bindRumUserData(@NonNull UserData data)

/**
 * 사용자 정보 해제
 */
public static void unbindRumUserData()
/**
 * 사용자 정보 바인딩
 *
 * @param id 사용자 ID
 */
fun bindRumUserData(id: String)

/**
 * 사용자 정보 바인딩
 *
 * @param data 사용자 정보
 */
fun bindRumUserData(data: UserData)

/**
 * 사용자 정보 해제
 */
fun unbindRumUserData()

UserData

메서드명 의미 필수 참고
setId 사용자 ID 설정 아니요
setName 사용자 이름 설정 아니요
setEmail 이메일 설정 아니요
setExts 사용자 확장 설정 아니요 추가 규칙은 애플리케이션 액세스를 참조하세요.

코드 예제

// 사용자 로그인 성공 후 이 메서드를 호출하여 사용자 정보를 바인딩할 수 있습니다.
FTSdk.bindRumUserData("001");

UserData userData = new UserData();
userData.setName("test.user");
userData.setId("test.id");
userData.setEmail("test@mail.com");
Map<String, String> extMap = new HashMap<>();
extMap.put("ft_key", "ft_value");
userData.setExts(extMap);
FTSdk.bindRumUserData(userData);

// 사용자 로그아웃 후 이 메서드를 호출하여 사용자 정보를 해제할 수 있습니다.
FTSdk.unbindRumUserData();
// 사용자 로그인 성공 후 이 메서드를 호출하여 사용자 정보를 바인딩할 수 있습니다.
FTSdk.bindRumUserData("001")

// 사용자 추가 데이터 바인딩
val userData = UserData()
userData.name = "test.user"
userData.id = "test.id"
userData.email = "test@mail.com"
val extMap = HashMap<String, String>()
extMap["ft_key"] = "ft_value"
userData.setExts(extMap)
FTSdk.bindRumUserData(userData)

// 사용자 로그아웃 후 이 메서드를 호출하여 사용자 정보를 해제할 수 있습니다.
FTSdk.unbindRumUserData()

문서 평가

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