For AI agents: a documentation index is available at /docs/llms.txt. Append .md to any page URL for markdown, or send Accept: text/markdown.
세션 리플레이 iOS 미들웨어
얼리 액세스 SDK
이 SDK는 알파 릴리스이므로 버그가 있거나 충돌을 일으킬 수 있습니다. 프로덕션에서 활성화하기 전에 제어된 환경에서 앱을 철저히 테스트하세요. 개발자 미리 보기 SDK의 모범 사례에 대한 자세한 내용은 SDK 유지 관리 및 지원을 참조하십시오.
이 문서에서는 iOS SDK 미들웨어를 통한 세션 리플레이 설치에 대해 설명합니다. 앱이 이미 (유지 관리) Amplitude SDK를 사용하는 경우, 이 옵션을 사용하십시오.
앱에서 이미 (최신) iOS Swift SDK를 사용하는 경우 세션 리플레이 iOS SDK 플러그인을 선택하십시오.
Analytics-Swift SDK 및 Amplitude(액션) 목적지를 통해 세그먼트를 사용하는 경우 세그먼트 플러그인을 선택하십시오.
제품 내 분석을 위해 Amplitude 이외의 공급자를 사용하는 경우, 독립형 구현을 선택하십시오.
세션 리플레이 및 성능
Amplitude는 다음을 통해 설치된 iOS 앱의 성능에 미치는 영향을 최소화하기 위해 세션 리플레이 기능을 구축했습니다.
- 주 사용자 인터페이스 스레드를 차단하지 않도록 비동기적으로 리플레이 데이터를 처리합니다. 메인 스레드는 뷰 계층과 상호 작용하는 데 사용되어야 하지만 모든 처리는 백그라운드 큐에서 수행됩니다.
- 배치 및 경량 압축을 사용하여 네트워크 연결 수와 대역폭을 줄입니다.
- 뷰 계층 구조 처리 최적화. 계층 구조 처리에 문제가 있는 경우 Amplitude에 문의하십시오.
시작하기 전에
세션 리플레이 미들웨어의 요구사항은 다음과 같습니다.
- 애플리케이션은 iOS 또는 iPadOS에서 실행됩니다.
- (유지 보수)Amplitude iOS SDK
8.22.0이상을 사용하고 있습니다. - SDK에 장치 ID를 제공할 수 있습니다.
지원되는 iOS 버전
세션 리플레이는 iOS 13 이상을 지원합니다.
빠른 시작
최신 버전의 미들웨어를 프로젝트 종속성에 추가하십시오.
세션 리플레이를 Package.swift 파일이나 Xcode의 패키지 목록에 의존성으로 추가하십시오.
dependencies: [
.package(url: "https://github.com/amplitude/AmplitudeSessionReplay-iOS", from: "0.14.0")
]
Amplitude-iOS와의 통합을 위해 AmplitudeiOSSessionReplayMiddleware 타겟을 사용하십시오.
.product(name: "AmplitudeiOSSessionReplayMiddleware", package: "AmplitudeSessionReplay")
애플리케이션 코드를 구성합니다.
import Amplitude
import AmplitudeiOSSessionReplayMiddleware
// Initialize Amplitude Analytics SDK instance
let amplitude = Amplitude.instance()
// Although not required, we recommend enabling session start and end events when enabling Session Replay
amplitude.defaultTracking.sessions = true
// Create and Install Session Replay Middleware
// Recording will be handled automatically
amplitude.addEventMiddleware(AmplitudeiOSSessionReplayMiddleware(sampleRate: 0.1))
amplitude.initializeApiKey(API_KEY)
구성
세션 리플레이 미들웨어를 초기화할 때 다음 옵션을 전달하십시오.
| 옵션 | 유형 | 필수 | 기본값 | 설명 |
|---|---|---|---|---|
sampleRate | Float | 아니요 | 0 | 리플레이 수집을 위해 선택할 세션 수를 제어합니다. 0에서 1 사이의 소수를 사용하십시오(예: 0.4, 리플레이 수집을 위해 무작위로 선택된 세션의 비율을 나타냄). 많은 수의 세션 중에서 0.4는 해당 세션의 40%을 선택합니다. 자세한 내용은 샘플링 속도를 참조하십시오. |
enableRemoteConfig | Bool | 아니요 | true | 이 세션 리플레이 인스턴스에 대한 원격 구성을 활성화하거나 비활성화합니다. |
autoStart | Bool | 아니요 | true | 세션 리플레이가 초기화될 때 자동으로 캡처를 시작할지 여부를 제어합니다. |
maskLevel | MaskLevel | 아니요 | .medium | 세션 리플레이가 화면상의 콘텐츠를 얼마나 많이 마스킹할지 설정합니다. .light, .medium 또는 .conservative을 사용하십시오. 자세한 내용은 마스크 수준을 참조하십시오. |
captureWebViews | Bool | 아니요 | false | 웹 보기 콘텐츠를 캡처할 수 있습니다. 기본적으로 세션 리플레이는 웹 뷰를 차단합니다. |
webviewMappings | [String: String] | 아니요 | [:] | 캡처된 웹 뷰 콘텐츠의 하위 문자열을 대체 값에 매핑합니다. captureWebViews을 활성화하면 세션 리플레이는 업로드하기 전에 웹 뷰 기록 데이터에 각 항목을 대소문자를 구분하지 않는 검색 및 바꾸기로 적용합니다. 이것은 고급옵션입니다. 대부분의 앱은 비워 둡니다. |
recordLogOptions.logCountThreshold | Int | 아니요 | 1000 | 세션당 최대 로그 수를 설정합니다. |
recordLogOptions.maxMessageLength | Int | 아니요 | 2000 | 로그 메시지의 최대 길이를 설정합니다. |
quality | QualityProfile | 아니요 | .high | 캡처 및 인코딩 품질(예: 프레임 속도 및 이미지 해상도)을 제어합니다. .low, .medium 또는 .high을 사용하여 재생 충실도와 성능 및 저장 용량의 균형을 맞출 수 있습니다. SDK가 장치에 따라 프로파일을 선택하도록 하려면 QualityProfile.automatic를 사용합니다. |
uploadConfig | UploadConfig | 아니요 | UploadConfig() | 세션 리플레이가 데이터를 업로드하는 시점을 제어합니다. 종량제 네트워크(예: 셀룰러)에서 업로드를 일시 중지하려면 UploadConfig(disableMeteredUploads: true)를 사용하십시오. |
화면상의 데이터 차단
세션 리플레이는 화면에 표시되는 민감한 데이터를 차단하는 세 가지 방법을 지원합니다. WebView에 대한 마스킹 설정은 웹 뷰 지원 섹션에서 확인하실 수 있습니다.
마스크 수준
iOS용 세션 리플레이는 maskLevel 옵션을 사용하여 구성할 수 있는 세 가지 수준의 마스킹을 지원합니다.
이 옵션은 세션 리플레이 설정에서 사용하십시오.
| 마스크 수준 | 설명 |
|---|---|
light | 모든 암호, 이메일 주소, 신용카드 번호 및 전화번호를 숨깁니다. |
medium | 편집 가능한 모든 텍스트 뷰를 마스크합니다. |
conservative | 모든 텍스트 뷰를 마스크합니다. |
UIKit의 개인정보 보호 방법
세션 리플레이는 UIView에서 개인정보 보호 기능을 관리하기 위한 확장 기능을 제공합니다. 사용하려면 세션 리플레이 라이브러리를 가져오십시오.
import AmplitudeSessionReplay
| 변수 | 설명 |
|---|---|
amp_isBlocked | 세션 리플레이에서 뷰와 그 하위 뷰를 위치 표시자로 대체하려면 view.amp_isBlocked를 설정하세요. UITextViews 및 UITextFields는 자동으로 차단됩니다. 기본적으로 마스크된 뷰의 차단을 해제하려면 이 값을 false로 설정하십시오 |
SwiftUI의 개인정보 보호 수정자
세션 리플레이는 개인정보 보호를 관리하기 위한 View 확장 기능을 제공합니다. 세션 리플레이 라이브러리를 가져와서 액세스 하세요.
import AmplitudeSessionReplay
| 수정자 | 설명 |
|---|---|
amp_setBlocked(_ blocked: Bool) | 세션 리플레이에서 특정 뷰와 그 하위 뷰를 플레이스홀더로 대체하려면 View에 amp_setBlocked() 수정자를 추가하세요. 기본적으로 마스크된 뷰의 차단을 해제하려면 이 값을 false로 설정하십시오 |
사용자 옵트아웃
세션 리플레이 미들웨어는 Amplitude-iOS SDK의 optOut 설정에 따르며 자체적으로 사용자 옵트아웃을 지원하지 않습니다.
// Set optOut on the Amplitude SDK
amplitude.optOut = true
amplitude.addEventMiddleware(AmplitudeiOSSessionReplayMiddleware(/* session replay options */))
EU 데이터 레지던시
세션 리플레이는 EU 데이터 센터를 사용하는 Amplitude 고객이 이용할 수 있습니다. 초기화할 때 serverZone 구성 옵션을 EU로 설정하십시오. 예를 들어:
// Set serverZone on the Amplitude SDK
amplitude.setServerZone(.EU)
amplitude.addEventMiddleware(AmplitudeiOSSessionReplayMiddleware(/* session replay options */))
샘플링 비율
기본적으로 세션 리플레이는 세션의 0%를 수집하도록 설정되어 있습니다. SDK의 sampleRate 구성 옵션을 사용하여 캡처할 세션의 비율을 설정합니다.
수동 및 동적 샘플링, 할당량 계획 및 할당량 계산에 대한 자세한 내용은 세션 리플레이 샘플링 구성을 참조하세요.
// This configuration samples 1% of all sessions
amplitude.addEventMiddleware(AmplitudeiOSSessionReplayMiddleware(sampleRate: 0.01))
레코딩 품질
재생 충실도와 성능 및 저장 공간의 균형을 맞추기 위해 품질 프로파일을 선택하십시오. 프로파일이 낮을수록 캡처 프레임 속도가 낮고 이미지 해상도가 낮습니다. 프로파일이 높을수록 프레임 속도가 높고 해상도가 높아집니다. SDK가 장치에 따라 프로파일을 선택하도록 허용하는 데 사용합니다(예: 최신 장치에서는 높음, 이전 장치에서는 낮음)QualityProfile.automatic.
// Use automatic profile selection based on device
amplitude.addEventMiddleware(AmplitudeiOSSessionReplayMiddleware(
sampleRate: 0.1,
quality: .automatic
))
// Or set a fixed profile (low, medium, or high)
amplitude.addEventMiddleware(AmplitudeiOSSessionReplayMiddleware(
sampleRate: 0.1,
quality: .medium
))
사용량이 부과되는 네트워크에서 업로드 비활성화
장치가 요금제 기반 네트워크에 있는 동안 세션 리플레이 업로드를 일시 중지하여 사용자의 휴대폰 데이터 사용을 방지하십시오. 세션 리플레이는 여전히 데이터를 로컬로 기록합니다. 기기가 Wi-Fi 또는 다른 종량제 제한이 없는 연결에 다시 연결되면 업로드가 재개됩니다.
amplitude.addEventMiddleware(AmplitudeiOSSessionReplayMiddleware(
sampleRate: 0.1,
uploadConfig: UploadConfig(disableMeteredUploads: true)
))
리플레이 수집 비활성화
활성화된 후에는 다음 중 하나가 발생할 때까지 세션 리플레이가 앱에서 실행됩니다.
- 사용자가 앱을 떠납니다.
sessionReplayMiddleware.stop()을(를) 호출하십시오.amplitude.removeEventMiddleware(sessionReplayMiddleware)를 사용하여 SDK에서 미들웨어를 제거합니다.
사용자가 앱의 제한된 영역으로 이동하기 전에 호출하여 사용자가 해당 영역에 있는 동안 재생 수집을 비활성화하십시오sessionReplayMiddleware.stop().
참조 유지
이 작업에는 세션 리플레이 미들웨어 인스턴스에 대한 참조를 유지하는 것이 필요합니다 let sessionReplayMiddleware = AmplitudeiOSSessionReplayMiddleware(/* session replay options */).
사용자가 앱의 제한되지 않은 영역으로 돌아왔을 때 재생 수집을 다시 활성화하려면 sessionReplayMiddleware.start()를 호출하십시오.
특정 화면만 캡처하려면 실행 시 시작되지 않도록 미들웨어를 autoStart: false로 초기화한 다음, 사용자가 해당 화면에 들어오고 나갈 때 start() 및 stop()를 호출하십시오.
// Add the middleware once, without starting capture
let sessionReplayMiddleware = AmplitudeiOSSessionReplayMiddleware(sampleRate: 1.0, autoStart: false)
amplitude.addEventMiddleware(sessionReplayMiddleware)
// Start capture when the user enters a screen you want to record
sessionReplayMiddleware.start()
// Stop capture when the user leaves that screen
sessionReplayMiddleware.stop()
또한 Amplitude 실험과 같은 기능 플래그 제품을 사용하여 위치와 같은 기준에 따라 리플레이 수집을 활성화하거나 비활성화하는 로직을 만들 수도 있습니다. 예를 들어, 특정 사용자 그룹을 대상으로 하는 기능 플래그를 생성하고 이를 초기화 논리에 추가할 수 있습니다.
import Amplitude
import AmplitudeiOSSessionReplayMiddleware
// Your existing initialization logic with Amplitude-iOS SDK
let amplitude = Amplitude.instance()
if (nonEUCountryFlagEnabled) {
// Create and Install Session Replay Middleware
let sessionReplayMiddleware = AmplitudeiOSSessionReplayMiddleware(sampleRate: 0.1)
amplitude.addEventMiddleware(sessionReplayMiddleware)
}
amplitude.initializeApiKey(API_KEY)
Web view 지원 (베타)
기본적으로 세션 리플레이는 캡처에서 웹 뷰를 차단합니다. 모든 WebView 구성 요소의 캡처를 활성화하려면 세션 리플레이 구성에서 captureWebViews를 true로 설정하십시오.
특정 WebView 구성 요소를 마스크하려면 화면 데이터 차단에 설명된 개인정보 보호 방법을 사용하십시오.
// UIKit
webView.amp_isBlocked = false
지도 보기 지원 (알파)
세션 리플레이는 iOS 애플리케이션에서 지도 보기 캡처를 지원합니다. 지도 보기 캡처를 활성화하려면 구현에서 지도 보기의 마스킹을 해제하십시오.
// UIKit
mapView.amp_isBlocked = false
// SwiftUI
Map().amp_setBlocked(false)
로그 기록
이용 가능 여부
AmplitudeSessionReplay0.8.0 이상은 로그 기록을 지원합니다.세션 리플레이는 iOS 애플리케이션에서 로그 기록을 지원합니다. 연동 초기화 시 recordLogOptions를 사용하여 제한을 설정한 다음 recordLog(level:message:date:)를 통해 로그 메시지를 전송하십시오.
import AmplitudeSessionReplay
let sessionReplay = SessionReplay(
apiKey: API_KEY,
recordLogOptions: .init(logCountThreshold: 2000, maxMessageLength: 4000)
)
sessionReplay.recordLog(level: .error, message: "This is an error log")
로그 시스템을 구현한 경우 한 곳만 수정하여 로그 기록 기능을 통합할 수 있습니다. 자세한 내용은 다음 예제를 참조하십시오.
CocoaLumberjack
CocoaLumberjack을 사용하는 경우 사용자 지정 로거 공급자와 통합할 수 있습니다.
class AmplitudeLogRecordLogger: DDAbstractLogger {
private weak var plugin: SessionReplayPlugin?
init(_ plugin: SessionReplayPlugin) {
self.plugin = plugin
}
override func log(message logMessage: DDLogMessage) {
let recordLevel: RecordLogLevel
switch logMessage.flag {
case .error:
recordLevel = .error
case .warning:
recordLevel = .warn
case .info:
recordLevel = .log
default:
return
}
plugin?.recordLog(level: recordLevel,
message: logMessage.message,
date: logMessage.timestamp)
}
}
let sessionReplayPlugin = AmplitudeSwiftSessionReplayPlugin()
amplitude.add(plugin: sessionReplayPlugin)
DDLog.add(AmplitudeLogRecordLogger(sessionReplayPlugin))
React Native
console 로그나 react-native-logs를 consoleTransport와 함께 사용한다면 이를 RCTAddLogFunction과 통합할 수 있습니다.
RCTAddLogFunction { level, source, fileName, lineNumber, message in
let recordLevel: RecordLogLevel
switch level {
case .error:
recordLevel = .error
case .warning:
recordLevel = .warn
case .info:
recordLevel = .log
case .fatal:
recordLevel = .error
case .trace:
recordLevel = .init("trace")
default:
return
}
self.sessionReplayPlugin.recordLog(level: recordLevel, message: message)
}
데이터 리텐션, 삭제 및 개인정보 보호
캡처를 구현할 때 동의 지침을 검토하십시오.
보관 기간
네이티브 및 Flutter SDK 보관 지침과 변경 시점에 대해서는 세션 리플레이 데이터 생애주기 분석 참조를 참조하세요.
DSAR API
DSAR API에서 반환된 리플레이 메타데이터에 대한 자세한 내용은 세션 리플레이 DSAR 메타데이터를 참조하세요.
데이터 삭제
사용자 및 프로젝트 삭제 동작에 대해서는 세션 리플레이 데이터 삭제를 참조하세요.
봇 필터
봇 필터링 및 속성 필터 제한에 대해서는 세션 리플레이 봇 필터링을 참조하세요.
세션 리플레이 저장 공간
사용자가 앱에서 추적을 거부하는 경우 optOut 구성 옵션을 사용하여 해당 사용자에 대한 리플레이 수집을 비활성화하십시오.
세션 리플레이 기능은 리플레이 데이터를 업로드하기 전에 파일 시스템에 임시로 저장합니다. 모든 초기화 시, 가장 오래된 리플레이 항목들을 트리밍하여 총 디스크 사용량을 최대 크기 이하로 줄입니다.
알려진 제한 사항
세션 리플레이 구현 시 다음 제한 사항을 염두에 두십시오.
세션 리플레이는 여러 프로젝트에 걸쳐 있는 동일 사용자의 리플레이를 하나로 연결하여 재생하지 않습니다. 예를 들어:
- 여러 앱을 별도의 Amplitude 프로젝트로 계측할 수 있으며 각 프로젝트에서 세션 리플레이 기능이 활성화되어 있습니다.
- 식별된 사용자는 한 앱에서 시작한 다음 다른 앱으로 전환합니다.
- Amplitude는 두 세션을 모두 캡처합니다.
- 각 세션의 리플레이는 해당 호스트 프로젝트에서 볼 수 있습니다.
조직에서 사용자 세션 정의를 사용하는 경우 사용자 세션 차트에는 세션 리플레이가 표시되지 않습니다.
세션 리플레이 기능은 다음과 같은 iOS 뷰를 캡처할 수 없습니다.
- SFSafariViewController와 같은 별도 프로세스에서 실행되는 iOS 뷰
- AVPlayerLayer 기반 뷰
이 내용이 도움이 되었나요?