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セグメント連携
この記事では、セッションリプレイiOSセグメントプラグインを使用したセッションリプレイのインストールについて説明します。アプリがSegmentのAnalytics-SwiftライブラリとAmplitude(アクション)の送信先を使用している場合にこのオプションを使用します。
アプリがAmplitude iOS SDKを使用している場合は、セッションリプレイiOS SDKプラグインを使用してください。
セグメントを他のオプションと組み合わせて使用する場合は、スタンドアロンの実装を選択してください。
セッションリプレイとパフォーマンス
Amplitudeは、セッションリプレイが組み込まれたiOSアプリのパフォーマンスへの影響を最小限に抑えるため、次の方法でセッションリプレイを開発しました:
- メインUIスレッドをブロックしないよう、リプレイデータを非同期で処理します。メインスレッドはビュー階層とのやり取りに使用する必要がありますが、すべての処理はバックグラウンドキューで行われます。
- バッチ処理と軽量圧縮を使用して、ネットワーク接続数と帯域幅を削減します。
- ビュー階層処理の最適化。階層処理に問題が発生した場合は、Amplitudeにお問い合わせください。
セッションリプレイ は、アプリケーションのビューツリー(メインビューとそのすべての子ビュー)に対する変更を再帰的にキャプチャします。その後、 セッションリプレイ はこれらの変更を再生して、ビデオのような再生を構築します。セッションの開始時に、 セッションリプレイ はアプリケーションのビューツリーの完全なスナップショットをキャプチャします。ユーザーがアプリとやり取りするときに、セッションリプレイはビューの変更をそれぞれdiffとしてキャプチャします。リプレイを視聴すると、 セッションリプレイ は各差分を順番に元のビューツリーに適用します。セッションリプレイには最大長はありません。
問題の報告
iOS用セッションリプレイに関する問題を報告される場合は、AmplitudeSessionReplay-ios GitHubリポジトリにアクセスしてください。
始める前に
セッションリプレイiOSセグメントプラグインには以下が必要です。
- アプリケーションは iOS または iPadOS 上で実行されます。
- 取り込みにはセグメントのAnalytics-Swiftライブラリを使用します。
- SegmentのAmplitude(アクション)送信先を使用します。
- SegmentのAmplitudeプラグインを使用しています。
対応しているiOSバージョン
セッションリプレイがサポートするiOSの最小ターゲットバージョンはiOS 13です。
クイックスタート
プラグインの最新バージョンをプロジェクトの依存関係に追加します。
SegmentプラグインはSwiftパッケージマネージャーからのみ利用できます。セッションリプレイを Package.swift ファイルまたは Xcode のパッケージリストに依存関係として追加します。
dependencies: [
.package(url: "https://github.com/amplitude/AmplitudeSessionReplay-iOS", from: "0.17.0")
]
Analytics-Swiftと統合するには、AmplitudeSegmentSessionReplayPluginターゲットを使用します。
.product(name: "AmplitudeSegmentSessionReplayPlugin", package: "AmplitudeSessionReplay")
アプリケーションコードを設定します。
import AmplitudeSegmentSessionReplayPlugin
import Segment
import SegmentAmplitude
// Initialize Segment
let analytics = Analytics(configuration: config)
// Ensure Segment's AmplitudeSession plugin is added before AmplitudeSegmentSessionReplayPlugin
analytics.add(plugin: AmplitudeSession())
// Initialize AmplitudeSegmentSessionReplayPlugin with your Amplitude API key
analytics.add(plugin: AmplitudeSegmentSessionReplayPlugin(amplitudeApiKey: API_KEY,
sampleRate: 0.1))
設定
セッションリプレイプラグインを初期化する際には、次のオプションを渡します。
| Name | タイプ | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
amplitudeApiKey | String | はい | 該当なし | Amplitude APIキーを設定します。 Segment プラグインは、Amplitude にリプレイを送信するためにこの値を必要とします。 |
sampleRate | Float | いいえ | 0 | このオプションを使用して、リプレイ収集のために選択するセッション数を制御します。 この数値は、0〜1の間の小数である必要があります(例: 0.4)。これは、リプレイ収集用にランダムに選択されたセッションの割合を表します。多数のセッションに対して、0.4 はそれらのセッションの 40% を選択します。 |
serverZone | ServerZone | いいえ | .US | EUまたは米国。Amplitudeサーバーゾーンを設定します。 EUデータセンターで作成されたAmplitudeプロジェクトの場合は、これをEUに設定します。 |
enableRemoteConfig | Bool | いいえ | true | このセッションリプレイのインスタンスに対するリモート設定を有効または無効にします。 |
autoStart | Bool | いいえ | true | セッションリプレイの初期化時に、自動的にキャプチャを開始するかどうかを制御します。 |
maskLevel | MaskLevel | いいえ | .medium | セッションリプレイがマスクする画面上のコンテンツの量を設定します。 .light、.medium、または.conservativeを使用してください。詳しくは、マスキングレベルを参照してください。 |
captureWebViews | Bool | いいえ | false | ウェブビューコンテンツのキャプチャを有効にします。デフォルトでは、セッションリプレイはWebViewをブロックします。 |
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) 従量制ネットワーク(モバイル通信など)でのアップロードを一時停止するため ードを一時停止します。 |
リモート設定
Amplitudeでサンプルレートとマスキングレベルを設定するには、リモート設定を有効にします。
リモート設定とテスト
リモート設定を有効にすると、Amplitudeで定義した設定がSDKでローカルで定義した設定よりも優先されます。 そのため、アプリケーションをテストする際は、リモート設定を無効にしてsampleRateを1に設定できるようにし、テストセッションが確実にキャプチャされるようにすることをお勧めします。
画面上のデータをブロックする
セッションリプレイは、機密性の高い画面上のデータをブロックするために3つの方法をサポートしています。 WebViewのマスキング設定は、WebViewのサポートセクションにあります。
マスクレベル
iOS向けセッションリプレイは、maskLevelオプションで設定可能な3つのレベルのマスキングをサポートしています。
このオプションは、セッションリプレイ設定で使用します。
| マスクレベル | 説明 |
|---|---|
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 に設定します。 |
ユーザーのオプトアウト
ユーザーがセッションリプレイをオプトアウトしたことを示すために、プラグインでoptOutを設定します。
// Pass a boolean value to indicate a users opt-out status
amplitudeSegmentSessionReplayPlugin.optOut = true
EUデータレジデンシー
セッションリプレイは、EUのデータセンターを使用するAmplitudeのお客様が利用できます。 初期化時に serverZone 設定オプションを EU に設定します。例:
// Set serverZone on the AmplitudeSegmentSessionReplayPlugin
let plugin = AmplitudeSegmentSessionReplayPlugin(amplitudeApiKey: API_KEY,
sampleRate: 0.1,
serverZone: .EU)
サンプリングレート
デフォルトでは、セッションリプレイで記録されるセッションの割合は0%です。 お使いのSDKのsampleRateキャプチャするセッションの割合を設定するための設定オプション。
手動および動的サンプリング、クォータ計画、クォータ管理については、セッションリプレイのサンプリングを設定するを参照してください。
// This configuration samples 1% of all sessions
analytics.add(plugin: AmplitudeSegmentSessionReplayPlugin(amplitudeApiKey: API_KEY,
sampleRate: 0.01))
録画品質
再生の忠実度と、パフォーマンスおよびストレージのバランスを調整するには、品質プロファイルを選択します。プロファイルが小さいほど、キャプチャフレームレートが低くなり、画像解像度も低くなります。プロファイルが高いほど、フレームレートと解像度が高くなります。SDKがデバイスに基づいてプロファイルを選択できるようにする場合は、QualityProfile.automaticを使用します。たとえば、SDK は新しいデバイスでは高値を選択し、古いデバイスでは低値を選択します。
// Use automatic profile selection based on device
analytics.add(plugin: AmplitudeSegmentSessionReplayPlugin(amplitudeApiKey: API_KEY,
sampleRate: 0.1,
quality: .automatic))
// Or set a fixed profile (low, medium, or high)
analytics.add(plugin: AmplitudeSegmentSessionReplayPlugin(amplitudeApiKey: API_KEY,
sampleRate: 0.1,
quality: .medium))
従量課金制ネットワークでのアップロードを無効にする
デバイスが従量課金制ネットワークに接続されている間は、セッションリプレイのアップロードを一時停止し、ユーザーのモバイルデータの使用を避けてください。セッションリプレイは引き続きデータをローカルに記録します。デバイスがWi-Fi、またはその他の従量制ではない接続に再接続されると、アップロードが再開されます。
analytics.add(plugin: AmplitudeSegmentSessionReplayPlugin(amplitudeApiKey: API_KEY,
sampleRate: 0.1,
uploadConfig: UploadConfig(disableMeteredUploads: true)))
リプレイ収集を無効にする
セッションリプレイを有効にした後は、次のいずれかの条件までアプリ上で実行されます。
- ユーザーがアプリを離れる。
amplitudeSegmentSessionReplayPlugin.stop()呼び出します。analytics.remove(plugin: amplitudeSegmentSessionReplayPlugin)を使用して、セグメントからこのプラグインを削除します。
ユーザーがアプリの制限付きエリアに移動する前にamplitudeSegmentSessionReplayPlugin.stop()を呼び出して、ユーザーがそのエリアにいる間のリプレイ収集を無効にします。
参照の保持
SessionReplayPluginインスタンスへの参照を保持します:let amplitudeSegmentSessionReplayPlugin = AmplitudeSegmentSessionReplayPlugin(/* session replay options */)。
ユーザーがアプリの制限のないエリアに戻ったときに、amplitudeSegmentSessionReplayPlugin.start()を呼び出してリプレイ収集を再度有効にします。
特定の画面のみをキャプチャするには、起動時に起動しないようにautoStart: falseでプラグインを初期化し、ユーザーがこれらの画面に出入りするときに、start()およびstop()を呼び出します。
// Add the plugin once, without starting capture
let amplitudeSegmentSessionReplayPlugin = AmplitudeSegmentSessionReplayPlugin(amplitudeApiKey: API_KEY,
sampleRate: 1.0,
autoStart: false)
analytics.add(plugin: amplitudeSegmentSessionReplayPlugin)
// Start capture when the user enters a screen you want to record
amplitudeSegmentSessionReplayPlugin.start()
// Stop capture when the user leaves that screen
amplitudeSegmentSessionReplayPlugin.stop()
また、Amplitude Experimentなどのフィーチャーフラグプロダクトを使用して、場所などの基準に基づいてリプレイ収集を有効または無効にするロジックを作成することもできます。たとえば、特定のユーザーグループを対象とするフィーチャーフラグを作成し、そのフラグを初期化ロジックに追加します。
import AmplitudeSegmentSessionReplayPlugin
import Segment
import SegmentAmplitude
// Your existing initialization logic with Segment
let analytics = Analytics(configuration: config)
analytics.add(plugin: AmplitudeSession())
if (nonEUCountryFlagEnabled) {
// Create and Install Session Replay Plugin
let amplitudeSegmentSessionReplayPlugin = AmplitudeSegmentSessionReplayPlugin(amplitudeApiKey: API_KEY, sampleRate: 0.1)
analytics.add(plugin: amplitudeSegmentSessionReplayPlugin)
}
Web View のサポート(ベータ版)
デフォルトでは、セッションリプレイはキャプチャ時に WebView をブロックします。すべての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)
}
データのリテンション、削除、プライバシー
キャプチャを実装する際には、同意に関するガイダンスを確認してください。
データ保持期間
ネイティブSDKおよびFlutter SDKのデータ保持に関するガイダンスと変更の適用日については、セッションリプレイのデータライフサイクルに関するリファレンスをご覧ください。
DSAR API
DSAR API によって返されるリプレイのメタデータについては、セッションリプレイの DSAR メタデータをご覧ください。
データ削除
ユーザーおよびプロジェクトの削除時の動作については、セッションリプレイのデータ削除を参照してください。
ボットフィルター
ボットのフィルタリングおよびプロパティフィルターの制限については、セッションリプレイのボットフィルタリングへ移動してください。
セッションリプレイのストレージ
ユーザーがアプリ内でのトラッキングをオプトアウトした場合は、optOut設定オプションを使用して、そのユーザーのリプレイデータの収集を無効にします。
セッションリプレイは、リプレイデータをアップロードする前に、ファイルシステムに一時的に保存します。初期化のたびに、最も古いリプレイデータが削除され、ディスク使用量が上限以下に抑えられます。
既知の制限事項
セッションリプレイを実装する際は、以下の制限事項に留意してください。
セッションリプレイは、複数のプロジェクトにわたる単一ユーザーのリプレイを統合しません。例:
- 複数のアプリをそれぞれ別のAmplitudeプロジェクトとして計測し、各プロジェクトでセッションリプレイを有効にします。
- 既知のユーザーが一方のアプリを利用し始め、その後、別のアプリに切り替えます。
- Amplitudeは両方のセッションをキャプチャします。
- 各セッションのリプレイは、対応するホストプロジェクトで表示できます。
組織でカスタムセッション定義を使用している場合、ユーザーセッションチャートにはセッションリプレイが表示されません。
セッションリプレイでは、以下のiOSビューをキャプチャできません:
- SFSafariViewControllerなどのプロセス外で動作するiOSビュー
- AVPlayerLayerを使用するビュー
これは役に立ちましたか?