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.5와 ft-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 | 아니요 | 사용자 모니터링 데이터 소스 구분을 위한 사용자 정의 태그를 추가합니다. 추적 기능을 사용해야 하는 경우 매개변수 key는 track_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.5와 ft-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=websocketresource_websocket_collection_level=handshakeresource_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;
});
FTIssueDataProvider.provideAdditionalFields(FTIssueInfo)는 Error 구성 시 동기적으로 호출되며 동시에 실행될 수 있습니다. 구현체는 스레드 안전성을 보장하고 I/O를 피해야 하며 10ms 이내에 반환해야 합니다. Provider를 설정한다고 해서 Crash 또는 ANR 수집이 자동으로 활성화되지는 않으며, 해당 수집 항목을 별도로 활성화해야 합니다.
- Provider가 트리거되는 것은 자동 수집된 Java/Native Crash, watchdog, native,
ApplicationExitInfoANR뿐입니다. 수동 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, setEnableTrackAppCrash 및 setEnableTrackAppANR을 구성하여 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¶
사용 방법¶
코드 예제¶
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를 사용하여 사용자 바인딩 및 해제를 수행합니다.
사용 방법¶
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()