콘텐츠로 이동

Android 세션 리플레이

전제 조건

  • FTSdk RUM 설정을 구성 및 초기화하고 View 모니터링 수집을 활성화했는지 확인하세요.
  • Android 세션 리플레이는 ft-sdk:1.7.0 이상 버전이 필요합니다.
  • ft-session-replayft-session-replay-material은 동일한 버전 번호를 사용해야 합니다.
  • ft-sdk 1.7.2 이상 버전은 더 이상 ft-session-replay에 강제로 의존하지 않습니다. 세션 리플레이를 활성화해야 하는 경우에만 ft-session-replay 및 관련 확장 종속성을 추가로 포함해야 합니다.
  • 문서 상단의 배지에 표시된 정식 출시 안정 버전을 우선 사용하는 것이 좋으며, alpha, beta 등의 사전 출시 버전은 더 이상 사용하지 않는 것이 좋습니다.

  • 향후 기능을 미리 적용하거나, 최신 기능을 확인하거나, 아직 정식 출시되지 않은 변경 사항을 추적하려면 GitHub에서 Android SDK 저장소 및 관련 변경 로그를 확인하세요: GuanceCloud/datakit-android

Android 히트맵(실험적 기능)

Android 히트맵을 사용하려면 ft-sdk >= 1.7.4ft-session-replay >= 0.1.7을 동시에 사용하고, 실제 사용자 모니터링(RUM) 사용자 행동 수집과 세션 리플레이를 활성화해야 합니다.

ft-sdk >= 1.7.0은 여전히 일반 Android 세션 리플레이의 최소 버전 요구 사항입니다. 위 버전 조합은 Android 히트맵에만 적용됩니다.

설정

// SDK 종속성 추가
implementation 'com.cloudcare.ft.mobile.sdk.tracker.agent:ft-sdk:[latest_version]'
// 세션 리플레이 기능을 활성화해야 하는 경우
implementation 'com.cloudcare.ft.mobile.sdk.tracker.agent:ft-session-replay:[session_replay_version]'
// 세션 리플레이에서 material 컴포넌트 지원이 필요한 경우
implementation 'com.cloudcare.ft.mobile.sdk.tracker.agent:ft-session-replay-material:[session_replay_version]'
// 세션 리플레이에서 compose 컴포넌트 지원이 필요한 경우
implementation 'com.cloudcare.ft.mobile.sdk.tracker.agent:ft-session-replay-compose:[session_replay_version]'

Flutter RUM 컨텍스트 호환성

ft-session-replay 0.1.5 이상 버전은 Flutter 세션 리플레이 업로드 시 사용하는 RUM 컨텍스트 필드와 호환됩니다. Android 네이티브 프로젝트에 Flutter 페이지 또는 Flutter SDK 수집 체인이 함께 있는 경우, ft-session-replay:0.1.5 이상 버전으로 업그레이드하면 추가 설정 없이 Flutter 리플레이 데이터를 해당 리플레이 세그먼트에 올바르게 매핑할 수 있습니다.

하이브리드 시나리오에서는 RUM을 먼저 초기화한 후 세션 리플레이를 초기화하여 app_id, session_id, view_id 등의 컨텍스트가 이미 설정되어 있도록 하는 것이 좋습니다.

코드 호출

FTSdk.initSessionReplayConfig(new FTSessionReplayConfig().setSampleRate(1f)
                .setTouchPrivacy(TouchPrivacy.SHOW)
                .setImagePrivacy(ImagePrivacy.MASK_LARGE_ONLY)
                .setTextAndInputPrivacy(TextAndInputPrivacy.MASK_SENSITIVE_INPUTS)
                .addExtensionSupport(new MaterialExtensionSupport()), context);
FTSdk.initSessionReplayConfig(FTSessionReplayConfig().setSampleRate(1f)
                .setTouchPrivacy(TouchPrivacy.SHOW)
                .setImagePrivacy(ImagePrivacy.MASK_LARGE_ONLY)
                .setTextAndInputPrivacy(TextAndInputPrivacy.MASK_SENSITIVE_INPUTS)
                .addExtensionSupport(MaterialExtensionSupport()), context)
메서드명 타입 필수 의미
setSampleRate Float 아니요 샘플링률을 설정합니다.取值范围 [0,1], 0은 수집하지 않음, 1은 전체 수집, 기본값은 1입니다.
setSessionReplayOnErrorSampleRate Float 아니요 오류 샘플링률을 설정합니다. setSampleRate에 의해 샘플링되지 않은 세션에서 오류가 발생한 경우, 오류 발생 전 1분 범위의 데이터를 수집할 수 있습니다.取值范围 [0,1], 0은 수집하지 않음, 1은 전체 수집, 기본값은 0입니다. ft-session-replay 0.1.2-alpha01 이상 버전에서 지원
setPrivacy SessionReplayPrivacy 아니요 SessionReplayPrivacy.ALLOW는 개인정보 데이터를 마스킹하지 않습니다. SessionReplayPrivacy.MASK는 텍스트, CheckBox, RadioButton, Switch를 포함한 모든 데이터를 마스킹합니다. SessionReplayPrivacy.USER_INPUT(권장)은 입력란의 텍스트, CheckBox, RadioButton, Switch 등 사용자가 입력한 일부 데이터만 마스킹합니다. 기본값은 SessionReplayPrivacy.MASK입니다. 곧 폐기 예정이며, 호환성을 위해 계속 사용할 수 있지만 setTouchPrivacy, setTextAndInputPrivacy를 우선 사용하여 마스킹을 설정하는 것이 좋습니다
setTextAndInputPrivacy TextAndInputPrivacy 아니요 TextAndInputPrivacy.MASK_SENSITIVE_INPUTS는 비밀번호 등 민감한 정보만 마스킹합니다. TextAndInputPrivacy.MASK_ALL_INPUTS는 사용자가 입력한 일부 데이터(입력란 텍스트, CheckBox, RadioButton, Switch)를 마스킹합니다. TextAndInputPrivacy.MASK_ALL은 텍스트, CheckBox, RadioButton, Switch를 포함한 모든 데이터를 마스킹합니다. 기본값은 TextAndInputPrivacy.MASK_ALL입니다. 설정 시 setPrivacy의 구성을 재정의합니다. ft-session-replay 0.1.1-alpha01 이상 버전에서 지원
setImagePrivacy ImagePrivacy 아니요 ImagePrivacy.MASK_ALL은 모든 이미지를 마스킹합니다. ImagePrivacy.MASK_LARGE_ONLY는 큰 이미지 내용(100x100 dp보다 큰 콘텐츠 이미지)만 마스킹합니다. ImagePrivacy.MASK_NONE은 이미지를 마스킹하지 않습니다. 기본값은 ImagePrivacy.MASK_ALL입니다. 설정 시 setPrivacy의 구성을 재정의합니다. ft-sdk >= 1.7.0-alpha40, ft-session-replay >= 0.1.3-alpha14
setTouchPrivacy TouchPrivacy 아니요 TouchPrivacy.SHOW는 터치 데이터를 마스킹하지 않습니다. TouchPrivacy.HIDE는 터치 데이터를 마스킹합니다. 설정 시 setPrivacy의 구성을 재정의합니다. ft-session-replay 0.1.1-alpha01 이상 버전에서 지원
addExtensionSupport ExtensionSupport 아니요 추가 사용자 지정 지원을 추가합니다. ft-session-replay-material을 사용하는 경우 MaterialExtensionSupport를 사용하여 추가 Material 컴포넌트 수집 지원을 제공할 수 있습니다.

프라이버시 재정의

ft-session-replay 0.1.1-alpha01 이상 버전에서 지원

SDK는 FTSessionReplayConfig를 통해 전역 마스킹 수준을 설정하는 것 외에도 뷰 수준에서 이러한 설정을 재정의할 수 있습니다.

뷰 수준 프라이버시 재정의:

  • 이미지 마스킹 수준 재정의 지원
  • 텍스트 및 입력 마스킹 수준과 터치 마스킹 수준 재정의 지원
  • 특정 뷰를 완전히 숨기도록 설정 지원

참고:

  • 재정의 설정을 올바르게 식별하려면 뷰 수명 주기 초기에 적용하는 것이 좋습니다. 이렇게 하면 설정된 재정의가 적용되기 전에 세션 리플레이가 뷰를 처리하는 것을 방지할 수 있습니다.
  • 프라이버시 재정의는 뷰와 그 하위 뷰에 영향을 미칩니다. 즉, 즉시 적용되지 않을 수 있는 뷰(예: 텍스트 입력에 이미지 재정의 적용)에 재정의가 적용되더라도 재정의는 모든 하위 뷰에 적용됩니다.
  • 프라이버시 재정의 우선순위: 하위 뷰 > 상위 뷰 > 전역 설정

이미지 재정의

ft-sdk >= 1.7.0-alpha40, ft-session-replay >= 0.1.3-alpha14

이미지 프라이버시를 재정의하려면 뷰 인스턴스에서 PrivacyOverrideExtensions.setSessionReplayImagePrivacy(View,ImagePrivacy)를 사용하여 ImagePrivacy 열거형의 값으로 설정합니다. 기존 재정의 규칙을 제거해야 하는 경우 속성을 null로 설정하면 됩니다.

// 지정된 뷰에 이미지 프라이버시 재정의 표시
PrivacyOverrideExtensions.setSessionReplayImagePrivacy(view, ImagePrivacy.MASK_ALL);
// 뷰의 이미지 프라이버시 재정의 설정 제거
PrivacyOverrideExtensions.setSessionReplayImagePrivacy(view, null);
// 지정된 뷰에 이미지 프라이버시 재정의 표시
PrivacyOverrideExtensions.setSessionReplayImagePrivacy(view, ImagePrivacy.MASK_ALL)
// 뷰의 이미지 프라이버시 재정의 설정 제거
PrivacyOverrideExtensions.setSessionReplayImagePrivacy(view, null)

텍스트 및 입력 재정의

텍스트 및 입력 프라이버시를 재정의하려면 뷰 인스턴스에서 PrivacyOverrideExtensions.setSessionReplayTextAndInputPrivacy(View,TextAndInputPrivacy)를 사용하여 TextAndInputPrivacy 열거형의 값으로 설정합니다. 기존 재정의 규칙을 제거해야 하는 경우 속성을 null로 설정하면 됩니다.

// 지정된 뷰에 요소 숨김 재정의 표시
PrivacyOverrideExtensions.setSessionReplayTextAndInputPrivacy(view, TextAndInputPrivacy.MASK_ALL);
// 뷰의 요소 숨김 재정의 설정 제거
PrivacyOverrideExtensions.setSessionReplayTextAndInputPrivacy(view, null);
// 지정된 뷰에 요소 숨김 재정의 표시
PrivacyOverrideExtensions.setSessionReplayTextAndInputPrivacy(view, TextAndInputPrivacy.MASK_ALL)
// 뷰의 요소 숨김 재정의 설정 제거
PrivacyOverrideExtensions.setSessionReplayTextAndInputPrivacy(view, null)

터치 재정의

터치 프라이버시를 재정의하려면 뷰 인스턴스에서 PrivacyOverrideExtensions.setSessionReplayTouchPrivacy(View,TouchPrivacy)를 사용하여 TouchPrivacy 열거형의 값으로 설정합니다. 기존 재정의 규칙을 제거해야 하는 경우 속성을 null로 설정하면 됩니다.

// 지정된 뷰에 요소 숨김 재정의 표시
PrivacyOverrideExtensions.setSessionReplayTouchPrivacy(view, TouchPrivacy.HIDE);
// 뷰의 요소 숨김 재정의 설정 제거
PrivacyOverrideExtensions.setSessionReplayTouchPrivacy(view, null);
// 지정된 뷰에 요소 숨김 재정의 표시
PrivacyOverrideExtensions.setSessionReplayTouchPrivacy(view, TouchPrivacy.HIDE)
// 뷰의 요소 숨김 재정의 설정 제거
PrivacyOverrideExtensions.setSessionReplayTouchPrivacy(view, null)

요소 숨김 재정의

완전히 숨겨야 하는 민감한 요소의 경우 PrivacyOverrideExtensions.setSessionReplayHidden(View,Boolean)을 사용하여 설정합니다.

요소를 숨김으로 설정하면 리플레이에서 "Hidden"이라는 플레이스홀더로 대체되고 하위 뷰는 기록되지 않습니다.

참고: 뷰를 숨김으로 표시한다고 해서 해당 요소에서 터치 상호 작용이 기록되지 않는 것은 아닙니다. 터치 상호 작용을 숨기려면 요소를 숨김으로 표시하는 것 외에도 터치 재정의를 사용하세요.

// 지정된 뷰에 요소 숨김 재정의 표시
PrivacyOverrideExtensions.setSessionReplayHidden(view, true)
// 뷰의 요소 숨김 재정의 설정 제거
PrivacyOverrideExtensions.setSessionReplayHidden(view, false)
// 지정된 뷰에 요소 숨김 재정의 표시
PrivacyOverrideExtensions.setSessionReplayHidden(view, true)
// 뷰의 요소 숨김 재정의 설정 제거
PrivacyOverrideExtensions.setSessionReplayHidden(view, false)

WebView 세션 리플레이

ft-session-replay 0.1.3-alpha11, ft-sdk 1.7.0-alpha36 이상 버전에서 지원

WebView 세션 리플레이를 사용하려면 WebView 액세스 페이지에 웹 모니터링 SDK를 통합하고 WebView에서 세션 리플레이를 활성화해야 합니다.

// webview RUM 설정 외부
window.DATAFLUX_RUM.startSessionReplayRecording();

Tencent WebView X5 지원

FTSdk.initSessionReplayConfig(new FTSessionReplayConfig()
    //...
    // CustomExtensionSupport 추가 설정
    .addExtensionSupport(new CustomExtensionSupport()
            .addMapper(new MapperTypeWrapper<>(com.tencent.smtt.sdk.WebView.class,
                    new WebViewXWireframeMapper())))
)
FTSdk.initSessionReplayConfig(FTSessionReplayConfig()
    //...
    // CustomExtensionSupport 추가 설정
    .addExtensionSupport(
        CustomExtensionSupport()
            .addMapper(
                MapperTypeWrapper(
                    com.tencent.smtt.sdk.WebView::class.java,
                    WebViewXWireframeMapper()
                )
            )
    )
)

Jetpack Compose 지원

ft-session-replay-composeft-session-replay는 동일한 버전 번호를 유지합니다.

Android 세션 리플레이는 Jetpack Compose UI의 수집 및 리플레이를 지원합니다. Compose 페이지를 사용할 때는 Compose 확장 종속성을 추가로 포함하고 FTSessionReplayConfigComposeExtensionSupport를 추가해야 합니다.

종속성 추가

implementation 'com.cloudcare.ft.mobile.sdk.tracker.agent:ft-session-replay-compose:[session_replay_version]'

초기화 설정

FTSdk.initSessionReplayConfig(new FTSessionReplayConfig().setSampleRate(1f)
                .setTouchPrivacy(TouchPrivacy.SHOW)
                .setImagePrivacy(ImagePrivacy.MASK_LARGE_ONLY)
                .setTextAndInputPrivacy(TextAndInputPrivacy.MASK_SENSITIVE_INPUTS)
                .addExtensionSupport(new ComposeExtensionSupport())
                .addExtensionSupport(new MaterialExtensionSupport()), context);
FTSdk.initSessionReplayConfig(FTSessionReplayConfig().setSampleRate(1f)
                .setTouchPrivacy(TouchPrivacy.SHOW)
                .setImagePrivacy(ImagePrivacy.MASK_LARGE_ONLY)
                .setTextAndInputPrivacy(TextAndInputPrivacy.MASK_SENSITIVE_INPUTS)
                .addExtensionSupport(ComposeExtensionSupport())
                .addExtensionSupport(MaterialExtensionSupport()), context)

Compose 프라이버시 재정의

Compose 페이지는 Modifier를 통해 세션 리플레이의 프라이버시 설정을 재정의할 수 있습니다:

  • sessionReplayHide(Boolean): 지정된 Compose 노드 숨기기
  • sessionReplayImagePrivacy(ImagePrivacy): 이미지 프라이버시 수준 재정의
  • sessionReplayTextAndInputPrivacy(TextAndInputPrivacy): 텍스트 및 입력 프라이버시 수준 재정의
  • sessionReplayTouchPrivacy(TouchPrivacy): 터치 프라이버시 수준 재정의

현재 제한 사항 설명

  • Compose 리플레이는 시맨틱 노드와 컴포넌트 매핑에 의존하므로 픽셀 단위의 완벽한 복원을 보장하지 않습니다.
  • 현재 일반 텍스트, 입력 상자, 이미지, 버튼, 스위치, 슬라이더, 라디오 버튼, 체크박스, Tab 및 컨테이너 클래스 컴포넌트의 리플레이를 지원합니다.
  • Brush 배경은 현재 지원되지 않습니다. 예를 들어 선형 그라데이션, 방사형 그라데이션 등의 배경은 원래 그라데이션 효과로 복원되지 않습니다. 주요 데모 영역에서는 단색 배경을 우선 사용하는 것이 좋습니다.

코드 및 설정 참고

문서 평가

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