コンテンツにスキップ

Flutter セッションリプレイ

前提条件

  • Flutter RUM の設定と初期化が完了しており、View の監視収集が有効になっていることを確認してください。
  • Flutter セッションリプレイを使用するには、ft_mobile_agent_flutterft_session_replay_flutter の両方をインストールする必要があります。
  • ft_mobile_agent_flutter 0.5.7 以降では Session Replay 機能がビルトインされなくなりました。Session Replay API は ft_session_replay_flutter からインポートする必要があります。
  • Android 側では ft-sdk:1.7.3ft-native:1.1.3ft-session-replay:0.1.6-beta01 を使用します。iOS 側では FTMobileSDK 1.6.5FTMobileSDK/FTSessionReplay 1.6.5 を使用します。
  • iOS プロジェクトの Deployment Target は 12.0 以上に設定する必要があります。
  • 最初に RUM を初期化してから Session Replay を初期化し、app_idsession_idview_id などのコンテキストが確立されていることを推奨します。

インストール

プロジェクトのパスで以下を実行します:

flutter pub add ft_mobile_agent_flutter
flutter pub add ft_session_replay_flutter

これにより、パッケージの pubspec.yaml に依存関係が追加されます:

dependencies:
  ft_mobile_agent_flutter: [latest_version]
  ft_session_replay_flutter: [session_replay_version]

未公開バージョンをローカルでデバッグする場合は、path 依存関係を使用できます:

dependencies:
  ft_mobile_agent_flutter:
    path: /path/to/ft-sdk-flutter
  ft_session_replay_flutter:
    path: /path/to/ft-sdk-flutter/packages/ft_session_replay_flutter

その後、以下を実行します:

flutter pub get

iOS の追加設定

アプリの ios/Podfile で、最低バージョンが 12.0 以上であることを確認してください:

platform :ios, '12.0'

CocoaPods の依存関係を更新します:

cd ios
pod install

CocoaPods が FTMobileSDK のバージョンまたは Deployment Target の競合を報告した場合は、プロジェクト内に他の依存関係があり、より低いバージョンの FTMobileSDK や iOS デプロイバージョンをロックしていないか確認してください。

コード呼び出し

Dart コードでメインパッケージと Session Replay パッケージの両方をインポートします:

import 'package:ft_mobile_agent_flutter/ft_mobile_agent_flutter.dart';
import 'package:ft_session_replay_flutter/ft_session_replay_flutter.dart';

推奨される初期化の順序:

  1. WidgetsFlutterBinding.ensureInitialized()
  2. FTMobileFlutter.sdkConfig(...)
  3. FTRUMManager().setConfig(...)
  4. FTSessionReplayManager().setConfig(...)
  5. 録画する Flutter ビューツリーを SessionReplayCapture でラップします
Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await FTMobileFlutter.sdkConfig(
    datawayUrl: datawayUrl,
    cliToken: cliToken,
    serviceName: serviceName,
    debug: true,
  );

  await FTRUMManager().setConfig(
    androidAppId: androidAppId,
    iOSAppId: iOSAppId,
    sampleRate: 1.0,
    enableUserResource: true,
    enableNativeAppUIBlock: true,
    enableTrackNativeCrash: true,
  );

  await FTSessionReplayManager().setConfig(
    FTSessionReplayConfig(
      sampleRate: 1.0,
      sessionReplayOnErrorSampleRate: 0.0,
      touchPrivacy: FTTouchPrivacyLevel.show,
      textAndInputPrivacy: FTTextAndInputPrivacyLevel.maskSensitiveInputs,
      imagePrivacy: FTImagePrivacyLevel.maskAll,
      enableSwiftUI: false,
    ),
  );

  runApp(
    SessionReplayCapture(
      key: const ValueKey('session-replay-root'),
      child: const MyApp(),
    ),
  );
}

アプリが MaterialApp.builder でページを一括ラップしている場合は、builder 内で SessionReplayCapture を使用することもできます:

MaterialApp(
  builder: (BuildContext context, Widget? child) {
    return SessionReplayCapture(
      key: const ValueKey('session-replay-root'),
      child: child ?? const SizedBox.shrink(),
    );
  },
);
属性 タイプ 必須 説明
sampleRate double いいえ サンプリングレート。範囲は [0,1]。0 は収集しない、1 は全収集。デフォルト値は 1。このサンプリングレートは RUM サンプリングに基づくサブサンプリングレートです。
sessionReplayOnErrorSampleRate double いいえ エラーシナリオにおける Session Replay のサンプリングレート。範囲は [0,1]。0 は収集しない、1 は全収集。デフォルト値は 0。
touchPrivacy FTTouchPrivacyLevel いいえ タッチ操作のプライバシーレベルを設定します。FTTouchPrivacyLevel.show はタッチ操作を表示、FTTouchPrivacyLevel.hide はタッチ操作を非表示。デフォルトは FTTouchPrivacyLevel.hide
textAndInputPrivacy FTTextAndInputPrivacyLevel いいえ テキストと入力内容のプライバシーレベルを設定します。maskSensitiveInputs は機密性の高い入力のみをマスク、maskAllInputs はすべての入力をマスク、maskAll はすべてのテキストと入力をマスク。デフォルトは maskAll
imagePrivacy FTImagePrivacyLevel いいえ 画像コンテンツのプライバシーレベルを設定します。maskNone は画像をマスクしない、maskLargeOnly はネイティブ SDK の部分的な画像マスク戦略を使用、maskAll はすべての画像をマスク。デフォルトは maskAll
enableLinkRUMKeys List いいえ 設定されたキーに基づいて、RUM Context 内の対応するフィールドをセッションリプレイデータに関連付けます。セッションリプレイデータの分流に使用できます。
enableSwiftUI bool いいえ iOS:ネイティブの SwiftUI セッションリプレイ録画を有効にするかどうか。デフォルトは false。Flutter Widget の録画には、引き続き SessionReplayCapture でビューツリーをラップする必要があります。

RUM View の関連付け

Session Replay データは RUM View コンテキストに関連付ける必要があります。FTRouteObserver を使用してページ遷移を自動収集するか、カスタムページライフサイクル内で FTRUMManager().starView(...)FTRUMManager().stopView(...) を手動で呼び出してください。

MaterialApp(
  navigatorObservers: [
    FTRouteObserver(),
  ],
);

ベース SDK または RUM が初期化されていない場合、Session Replay の初期化はアプリケーションのクラッシュを引き起こしませんが、アップロード可能なリプレイデータは生成されません。

プライバシーオーバーライド

SessionReplayPrivacy を使用すると、Flutter の局所的なビューツリーにプライバシーオーバーライドを設定できます。プライバシーオーバーライドはその子ビューにも適用されます。複数のオーバーライドが存在する場合、子ビューは最も近い親のプライバシー設定を使用します。

SessionReplayPrivacy(
  textAndInputPrivacyLevel: FTTextAndInputPrivacyLevel.maskAll,
  imagePrivacyLevel: FTImagePrivacyLevel.maskAll,
  touchPrivacyLevel: FTTouchPrivacyLevel.hide,
  child: child,
);

セッションリプレイの確認

モバイル端末でのセッションリプレイの確認方法は Web と同じです。Web セッションリプレイのアクセス方法を参照してください。

フィードバック

このページは役に立ちましたか?