このページでは

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アプリのパフォーマンスへの影響を最小限に抑えるため、次の方法でセッションリプレイを開発しました:

  • メインUIスレッドをブロックしないよう、リプレイデータを非同期で処理します。メインスレッドはビュー階層とのやり取りに使用する必要がありますが、すべての処理はバックグラウンドキューで行われます。
  • バッチ処理と軽量圧縮を使用して、ネットワーク接続数と帯域幅を削減します。
  • ビュー階層処理の最適化。階層処理に問題が発生した場合は、Amplitudeにお問い合わせください。

始める前に

セッションリプレイミドルウェアには以下が必要です。

  1. アプリケーションは iOS または iPadOS 上で実行されます。
  2. (メンテナンス)Amplitude iOS SDKの8.22.0以上を使用していること。
  3. デバイスIDをSDKに提供できること。

対応しているiOSバージョン

セッションリプレイがサポートするiOSの最小ターゲットバージョンはiOS 13です。

クイックスタート

プロジェクトの依存関係に最新バージョンのミドルウェアを追加してください。

セッションリプレイをPackage.swiftファイルの依存関係として追加するか、Xcodeのパッケージリストに含めます。

swift
dependencies: [
    .package(url: "https://github.com/amplitude/AmplitudeSessionReplay-iOS", from: "0.14.0")
]

Amplitude-iOSと統合する場合は、AmplitudeiOSSessionReplayMiddlewareターゲットを使用してください。

swift
.product(name: "AmplitudeiOSSessionReplayMiddleware", package: "AmplitudeSessionReplay")

アプリケーションコードを設定します。

swift
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)

設定

セッションリプレイミドルウェアを初期化する際には、次のオプションを渡します。

画面上のデータをブロックする

セッションリプレイは、機密性の高い画面上のデータをブロックするために3つの方法をサポートしています。 WebViewのマスキング設定は、WebViewのサポートセクションにあります。

マスクレベル

iOS向けセッションリプレイは、maskLevelオプションで設定可能な3つのレベルのマスキングをサポートしています。

このオプションは、セッションリプレイ設定で使用します。

UIKit のプライバシーメソッド

セッションリプレイは、プライバシーを管理するための UIView 拡張機能を提供します。セッションリプレイライブラリをインポートしてアクセスできるようにします。

swift
import AmplitudeSessionReplay

SwiftUIのプライバシー修飾子

セッションリプレイでは、プライバシーを管理するためにViewの拡張機能を提供しています。セッションリプレイライブラリをインポートしてアクセスします。

swift
import AmplitudeSessionReplay

ユーザーのオプトアウト

セッションリプレイミドルウェアはAmplitude-iOS SDKのoptOut設定に従っており、単独ではユーザーのオプトアウトをサポートしていません。

swift
// Set optOut on the Amplitude SDK
amplitude.optOut = true
amplitude.addEventMiddleware(AmplitudeiOSSessionReplayMiddleware(/* session replay options */))

EUデータレジデンシー

セッションリプレイは、EUのデータセンターを使用するAmplitudeのお客様が利用できます。 初期化時に serverZone 設定オプションを EU に設定します。例:

swift
// Set serverZone on the Amplitude SDK
amplitude.setServerZone(.EU)
amplitude.addEventMiddleware(AmplitudeiOSSessionReplayMiddleware(/* session replay options */))

サンプリングレート

デフォルトでは、セッションリプレイで記録されるセッションの割合は0%です。 お使いのSDKのsampleRateキャプチャするセッションの割合を設定するための設定オプション。

手動および動的サンプリング、クォータ計画、クォータ管理については、セッションリプレイのサンプリングを設定するを参照してください。

swift
// This configuration samples 1% of all sessions
amplitude.addEventMiddleware(AmplitudeiOSSessionReplayMiddleware(sampleRate: 0.01))

録画品質

再生の忠実度と、パフォーマンスおよびストレージのバランスを調整するには、品質プロファイルを選択します。プロファイルが小さいほど、キャプチャフレームレートが低くなり、画像解像度も低くなります。プロファイルが高いほど、フレームレートと解像度が高くなります。SDKがデバイスに基づいてプロファイルを選択できるようにする場合は、QualityProfile.automaticを使用します(例:新しいデバイスでは高く、古いデバイスでは低くするなど)。

swift
// 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、またはその他の従量制ではない接続に再接続されると、アップロードが再開されます。

swift
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()を呼び出します。

swift
// 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 Experimentなどのフィーチャーフラグプロダクトを使用して、場所などの基準に基づいてリプレイ収集を有効または無効にするロジックを作成することもできます。たとえば、特定のユーザーグループを対象とするフィーチャーフラグを作成し、それを初期化ロジックに追加できます。

swift
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 をブロックします。すべてのWebViewコンポーネントのキャプチャを有効にするには、セッションリプレイ設定でcaptureWebViewsをtrueに設定します。

特定の WebView コンポーネントをマスクするには、画面上のデータをブロックする で説明されているプライバシーメソッドを使用してください。

swift
// UIKit
webView.amp_isBlocked = false

マップビューのサポート(アルファ版)

セッションリプレイは、iOS アプリでのマップビューのキャプチャに対応しています。マップビューのキャプチャを有効にするには、実装でマップビューのマスクを解除してください。

swift
// UIKit
mapView.amp_isBlocked = false
// SwiftUI
Map().amp_setBlocked(false)

ログの記録

提供状況

AmplitudeSessionReplay 0.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、カスタムロガープロバイダーと統合できます。

swift
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と統合できます。

swift
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を使用するビュー

これは役に立ちましたか?