> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flashduty.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Flutter SDK 数据收集

> 了解 Flutter RUM SDK 采集的事件类型、字段与上报行为

本文说明 Flutter SDK 采集哪些数据、如何上报，以及如何控制采集范围。所有事件都写入 `source: "flutter"`。

## 事件类型

| 事件        | 触发方式                                          | 说明                                                     |
| --------- | --------------------------------------------- | ------------------------------------------------------ |
| view      | 路由切换（`DatadogNavigationObserver`）或手动 API      | 一次页面停留，记录加载耗时、内部的 action / resource / error 数量         |
| action    | `RumUserActionDetector` 自动识别或 `rum.addAction` | 用户交互（tap / scroll / swipe / custom），可关联 frustration 信号 |
| resource  | `enableHttpTracking()` 或 `DatadogClient`      | 一次网络请求，记录 URL、方法、状态码、耗时、大小                             |
| error     | 自动（未处理异常 / 原生崩溃）或 `rum.addError`              | 错误与崩溃，含类型、消息、堆栈                                        |
| long task | `detectLongTasks` 默认开启                        | 超过 `longTaskThreshold`（默认 0.1s）的主线程阻塞                  |

## 自动采集的上下文

每个事件会自动附带以下上下文（由原生层采集）：

* **应用信息**：`service`、`version`、`env`，以及 `application_id`
* **设备信息**：设备型号、操作系统与版本、屏幕尺寸
* **会话信息**：`session.id`，按 `sessionSamplingRate` 采样
* **连接信息**：网络类型（如可用）
* **用户信息**：通过 `setUserInfo` 设置的 `usr.id` / `usr.name` / `usr.email`

## 手动埋点

除了自动采集，你可以手动记录事件与属性。

```dart theme={null}
final rum = DatadogSdk.instance.rum;

// 手动管理视图
rum?.startView('checkout', 'Checkout');
rum?.stopView('checkout');

// 手动记录操作
rum?.addAction(RumActionType.tap, 'pay_button');

// 手动上报错误
rum?.addErrorInfo('payment failed', RumErrorSource.source);

// 附加全局属性（写入后续所有事件）
rum?.addAttribute('tenant', 'acme');
```

## 采样与控制

| 配置                    | 默认值   | 说明                          |
| --------------------- | ----- | --------------------------- |
| `sessionSamplingRate` | 100.0 | 会话采样率（百分比）；未命中的会话不产生 RUM 数据 |
| `traceSampleRate`     | 100.0 | resource 上分布式追踪的采样率         |
| `telemetrySampleRate` | 20.0  | SDK 自身遥测采样率                 |
| `detectLongTasks`     | true  | 是否采集 long task              |
| `trackFrustrations`   | true  | 是否从用户操作生成 frustration 信号    |
| `trackAnonymousUser`  | true  | 是否为未登录用户生成匿名 ID             |

## 数据脱敏

通过事件映射器（event mapper）可以在事件上报前修改或丢弃数据，用于脱敏或过滤噪声。详见 <a href="/zh/rum/sdk/flutter/advanced-config">高级配置</a>。

```dart theme={null}
DatadogRumConfiguration(
  applicationId: '<APPLICATION_ID>',
  resourceEventMapper: (event) {
    // 返回 null 丢弃事件，或修改后返回
    return event;
  },
);
```

## 上报行为

* SDK 在原生层做批量缓存，按 `batchSize` 与 `uploadFrequency` 分批上报
* 网络不可用时事件会持久化到本地，恢复后重试
* 上报地址默认为站点对应地址（`FlashcatSite.cn` → `browser.flashcat.cloud`），私有化可通过 `customEndpoint` 覆盖
