iOS 세션 리플레이¶
전제 조건¶
- GuanceSDKRUM 구성을 설정 및 초기화하고, View 모니터링 수집을 활성화했는지 확인하세요.
- iOS 세션 리플레이 버전 지원: SDK.Version >= 1.6.0.
- 이전 버전에서 SDK 1.6.6 이상으로 업그레이드하는 경우, 세션 리플레이 제품명이
GuanceSessionReplay로 변경되었습니다. 마이그레이션 가이드를 참조하세요. -
문서 상단의 배지에 표시된 공식 안정 버전을 우선 사용하는 것을 권장하며,
alpha,beta등의 프리릴리스 버전은 더 이상 사용하지 않는 것이 좋습니다. -
선행 기능을 미리 통합하거나 최신 기능을 확인하거나 공식 릴리스되지 않은 변경 사항을 추적하려면 GitHub에서 iOS SDK 저장소 및 관련 업데이트 로그를 확인하세요: GuanceCloud/datakit-ios
설정¶
패키지 관리자에 따라 GuanceSDK 라이브러리의 GuanceSessionReplay 기능 구성 요소를 프로젝트에 연결하세요:
CocoaPods¶
Swift Package Manager¶
dependencies: [
.package(url: "https://github.com/GuanceCloud/datakit-ios.git",
from: "last_version")
],
targets: [
.target(
name: "YourTarget",
dependencies: [
.product(name: "GuanceSDK", package: "GuanceSDK"),
.product(name: "GuanceSessionReplay", package: "GuanceSDK"), // 새로 추가
]),
]
Carthage/Framework¶
SDK 1.6.2 이상 버전 지원
Carthage를 사용하거나 Framework를 수동으로 통합할 때는 기본 SDK 외에도 GuanceSessionReplay 세션 리플레이 구성 요소를 메인 프로젝트 Target의 Frameworks에 함께 추가해야 합니다.
GuanceSessionReplay는 세션 리플레이 기능 구성 요소로, GuanceSDK 기본 기능에 의존하며 단독으로 사용할 수 없습니다.
Objective-C 진입점¶
Objective-C import 경로는 통합 방식에 따라 다릅니다:
| 통합 방식 | 권장 진입점 |
|---|---|
| CocoaPods | #import <GuanceSDK/GuanceSessionReplay.h> |
| Swift Package Manager | @import GuanceSessionReplay; |
| Carthage / Framework | #import <GuanceSessionReplay/GuanceSessionReplay.h> |
| 다음 Objective-C 예제는 통일하여 Swift Package Manager 방식을 사용합니다. CocoaPods 또는 Carthage / Framework로 통합하는 경우 위 표에 따라 진입점 행을 교체하세요. |
코드 호출¶
@import GuanceSessionReplay;
FTSessionReplayConfig *srConfig = [[FTSessionReplayConfig alloc]init];
srConfig.touchPrivacy = FTTouchPrivacyLevelShow;
srConfig.textAndInputPrivacy = FTTextAndInputPrivacyLevelMaskSensitiveInputs;
srConfig.imagePrivacy = FTImagePrivacyLevelMaskNonBundledOnly;
// SwiftUI 페이지 수집이 필요한 경우, SDK 1.6.5 이상 버전에서 활성화 가능
srConfig.enableSwiftUI = YES;
// 세션 리플레이 히트맵 연동이 필요한 경우, SDK 1.6.6 이상 버전에서 활성화 가능
srConfig.enableHeatmap = YES;
srConfig.sampleRate = 100;
[[FTRumSessionReplay sharedInstance] startWithSessionReplayConfig:srConfig];
let srConfig = FTSessionReplayConfig.init()
srConfig.touchPrivacy = .show
srConfig.textAndInputPrivacy = .maskSensitiveInputs
srConfig.imagePrivacy = .maskNonBundledOnly
// SwiftUI 페이지 수집이 필요한 경우, SDK 1.6.5 이상 버전에서 활성화 가능
srConfig.enableSwiftUI = true
// 세션 리플레이 히트맵 연동이 필요한 경우, SDK 1.6.6 이상 버전에서 활성화 가능
srConfig.enableHeatmap = true
srConfig.sampleRate = 100
FTRumSessionReplay.shared().start(with: srConfig)
| 속성 | 유형 | 필수 | 설명 |
|---|---|---|---|
| sampleRate | int | 아니요 | 샘플링 비율. 범위 [0,100], 0은 수집 안 함, 100은 전체 수집, 기본값은 100입니다. 이 샘플링 비율은 RUM 샘플링을 기반으로 하는 샘플링 비율입니다. |
| sessionReplayOnErrorSampleRate | int | 아니요 | 오류 수집 비율을 설정합니다. 세션이 sampleRate에 의해 샘플링되지 않은 경우, 세션 중 오류가 발생하면 오류 발생 전 1분 범위의 데이터를 수집할 수 있습니다. 범위 [0,100], 0은 수집 안 함, 100은 전체 수집, 기본값은 0입니다. SDK 1.6.2 이상 버전 지원 |
| privacy | FTSRPrivacy | 아니요 | 세션 리플레이에서 콘텐츠 마스킹의 프라이버시 수준을 설정합니다. 기본값 FTSRPrivacyMask.마스킹 처리: 텍스트를 * 또는 #으로 대체합니다. FTSRPrivacyAllow: 민감한 입력 컨트롤을 제외한 텍스트 및 입력 콘텐츠를 기록하고, 사용자 터치를 표시하며, 모든 이미지를 기록합니다.FTSRPrivacyMaskUserInput: 입력 요소를 마스킹하고 사용자 터치를 숨기며, SF Symbols 및 [UIImage imageNamed:] / UIImage(named:)로 로드되어 앱에 번들된 이미지만 기록합니다.FTSRPrivacyMask: 모든 텍스트, 입력, 터치 및 이미지를 마스킹합니다.곧 폐기 예정, 호환되어 사용 가능하며, touchPrivacy, textAndInputPrivacy, imagePrivacy를 우선 사용하여 세분화된 마스킹 프라이버시 수준을 설정하는 것을 권장합니다 |
| touchPrivacy | FTTouchPrivacyLevel | 아니요 | 세션 리플레이에서 터치 마스킹의 사용 가능한 프라이버시 수준입니다. 기본값 FTTouchPrivacyLevelHide.FTTouchPrivacyLevelShow: 모든 사용자 터치 표시FTTouchPrivacyLevelHide: 모든 사용자 터치 마스킹설정 시 privacy 구성을 덮어씁니다SDK 1.6.1 이상 버전 지원 |
| textAndInputPrivacy | FTTextAndInputPrivacyLevel | 아니요 | 세션 리플레이에서 텍스트 및 입력 마스킹의 사용 가능한 프라이버시 수준입니다. 기본값 FTTextAndInputPrivacyLevelMaskAllFTTextAndInputPrivacyLevelMaskSensitiveInputs: 비밀번호 입력과 같은 민감한 입력을 제외한 모든 텍스트 표시FTTextAndInputPrivacyLevelMaskAllInputs: UITextField, UISwitch, UISlider 등 모든 입력 필드 마스킹FTTextAndInputPrivacyLevelMaskAll: 모든 텍스트 및 입력 마스킹설정 시 privacy 구성을 덮어씁니다SDK 1.6.1 이상 버전 지원 |
| imagePrivacy | FTImagePrivacyLevel | 아니요 | 세션 리플레이에서 이미지 마스킹의 사용 가능한 프라이버시 수준입니다. 기본값 FTImagePrivacyLevelMaskAll.FTImagePrivacyLevelMaskNonBundledOnly: SF Symbols 및 [UIImage imageNamed:] / UIImage(named:)로 로드되어 앱에 번들된 이미지만 기록하며, 네트워크 다운로드 또는 런타임에 생성된 이미지는 마스킹됩니다.FTImagePrivacyLevelMaskAll: 모든 이미지 마스킹.FTImagePrivacyLevelMaskNone: 네트워크 다운로드 또는 런타임에 생성된 이미지를 포함한 모든 이미지를 기록합니다. 이미지에 민감한 콘텐츠가 포함되어 있지 않은지 확인 후 사용하세요.설정 시 privacy 구성을 덮어씁니다SDK 1.6.2 이상 버전 지원 |
| enableSwiftUI | BOOL | 아니요 | SwiftUI 페이지의 세션 리플레이 수집을 활성화합니다. 기본값은 NO입니다. SDK 1.6.5 이상 버전 지원 |
| enableHeatmap | BOOL | 아니요 | 세션 리플레이 히트맵 연동 기능을 활성화합니다. 기본값은 NO이며, 실험적 기능입니다. SDK 1.6.6 이상 버전 지원 |
| enableLinkRUMKeys | NSArray | 아니요 | 활성화하면 설정된 keys에 따라 RUM Context의 해당 필드를 세션 리플레이 데이터에 연결합니다. 세션 리플레이 데이터 분류에 사용할 수 있습니다. SDK 1.6.2 이상 버전 지원 |
참고:
enableHeatmap은 자동 수집된 UIKit Action에만 연결됩니다. 일부 UIKit Action은 Heatmap을 지원하지 않을 수 있습니다. SwiftUI Action은 현재 자동 수집을 지원하지 않으므로enableHeatmap을 통해 히트맵을 연결할 수 없습니다.
프라이버시 오버라이드¶
SDK 1.6.1 이상 버전 지원
SDK는 FTSessionReplayConfig를 통한 전역 마스킹 수준 설정 외에도 뷰 수준에서 이러한 설정을 덮어쓰는 것을 지원합니다.
뷰 수준 프라이버시 오버라이드:
- 텍스트 및 입력 마스킹 수준, 터치 마스킹 수준, 이미지 마스킹 수준(SDK 1.6.2 이상 버전 지원)의 덮어쓰기를 지원합니다.
- 특정 뷰를 완전히 숨기는 설정을 지원합니다.
참고:
- 오버라이드를 올바르게 식별하려면 뷰의 수명 주기 초기에 적용해야 합니다. 이렇게 하면 세션 리플레이가 설정된 오버라이드를 적용하기 전에 뷰를 처리하는 상황을 방지할 수 있습니다.
- 프라이버시 오버라이드는 뷰와 그 하위 뷰에 영향을 미칩니다. 즉, 오버라이드가 즉시 적용되지 않을 수 있는 뷰(예: 텍스트 입력에 이미지 오버라이드 적용)에 적용되더라도 오버라이드는 모든 하위 뷰에 계속 적용됩니다.
- 프라이버시 오버라이드 우선순위: 하위 뷰 > 상위 뷰 > 전역 설정
텍스트 및 입력 오버라이드¶
텍스트 및 입력 프라이버시를 덮어쓰려면 뷰 인스턴스에서 sessionReplayPrivacyOverrides.textAndInputPrivacy를 사용하여 FTTextAndInputPrivacyLevelOverride 열거형의 값 중 하나로 설정합니다. 기존 오버라이드 규칙을 제거하려면 해당 속성을 FTTextAndInputPrivacyLevelOverrideNone으로 설정하면 됩니다.
터치 오버라이드¶
터치 프라이버시를 덮어쓰려면 뷰 인스턴스에서 sessionReplayPrivacyOverrides.touchPrivacy를 사용하여 FTTouchPrivacyLevelOverride 열거형의 값 중 하나로 설정합니다. 기존 오버라이드 규칙을 제거하려면 해당 속성을 FTTouchPrivacyLevelOverrideNone으로 설정하면 됩니다.
이미지 오버라이드¶
SDK 1.6.2 이상 버전 지원
이미지 프라이버시를 덮어쓰려면 뷰 인스턴스에서 sessionReplayPrivacyOverrides.imagePrivacy를 사용하여 FTImagePrivacyLevelOverride 열거형의 값 중 하나로 설정합니다. 기존 오버라이드 규칙을 제거하려면 해당 속성을 FTImagePrivacyLevelOverrideNone으로 설정하면 됩니다.
사용 가능한 이미지 오버라이드 수준:
FTImagePrivacyLevelOverrideMaskNonBundledOnly: SF Symbols 및[UIImage imageNamed:]/UIImage(named:)로 로드되어 앱에 번들된 이미지만 기록하며, 네트워크 다운로드 또는 런타임에 생성된 이미지는 마스킹됩니다.FTImagePrivacyLevelOverrideMaskAll: 모든 이미지 마스킹.FTImagePrivacyLevelOverrideMaskNone: 네트워크 다운로드 또는 런타임에 생성된 이미지를 포함한 모든 이미지를 기록합니다. 이미지에 민감한 콘텐츠가 포함되어 있지 않은지 확인 후 사용하세요.
숨김 요소 오버라이드¶
완전히 숨겨야 하는 민감한 요소의 경우 sessionReplayPrivacyOverrides.hide를 사용하여 설정합니다.
특정 요소를 숨김으로 설정하면 리플레이에서 "Hidden"으로 표시된 플레이스홀더로 대체되며, 하위 뷰는 기록되지 않습니다.
참고: 뷰를 숨김으로 표시한다고 해서 해당 요소에 대한 터치 상호 작용 기록이 방지되지는 않습니다. 터치 상호 작용을 숨기려면 요소를 숨김으로 표시하는 것 외에 터치 오버라이드도 함께 사용하세요.
Webview 세션 리플레이¶
SDK 1.6.2 이상 버전 지원
WebView 세션 리플레이를 사용하려면 WebView에서 액세스하는 페이지에 Web 모니터링 SDK를 통합하고, Webview에서 세션 리플레이를 활성화해야 합니다.