跳转至

RUM 配置

RUM 初始化配置

await FTRUMManager().setConfig(
  androidAppId: appAndroidId,
  iOSAppId: appIOSId,
);
字段 类型 必须 说明
androidAppId String Android 平台的 app_id,在应用访问监测控制台申请
iOSAppId String iOS 平台的 app_id,在应用访问监测控制台申请
sampleRate double 采样率,取值范围 [0,1],0 表示不采集,1 表示全采集,默认值为 1。作用域为同一 session_id 下所有 View、Action、LongTask、Error 数据
sessionOnErrorSampleRate double 错误采集率。当会话未被 sampleRate 采样时,若会话期间发生错误,可以采集到错误前 1 分钟范围的数据,取值范围 [0,1],默认值为 0
enableUserResource bool 是否开启 Flutter http Resource 自动抓取,默认 false。通过修改 HttpOverrides.global 实现,如果项目有定制需求需要继承 FTHttpOverrides
enableNativeUserAction bool 是否进行 Native Action 追踪,默认 false
enableNativeUserView bool 是否进行 Native View 自动追踪。纯 Flutter 应用建议关闭,默认 false
enableNativeUserViewInFragment bool 是否自动追踪 Native Fragment 类型的页面数据,默认 false,仅支持 Android
enableNativeUserResource bool 是否进行 Native Resource 自动追踪。纯 Flutter 应用建议关闭,默认 false
enableAppUIBlock bool 是否进行 Native Freeze 自动追踪,默认 false
nativeUiBlockDurationMS int 设置 Native Freeze 的时间范围,取值范围 [100, ),单位毫秒。iOS 默认 250ms,Android 默认 1000ms
enableTrackNativeAppANR bool 是否开启 Native ANR 监测,默认 false
enableTrackNativeCrash bool 是否开启 Android Java CrashOC/C/C++ 崩溃监测,默认 false
errorMonitorType enum ErrorMonitorType 设置辅助监控信息,添加附加监控数据到 RUM Error 数据中。默认不开启
deviceMetricsMonitorType enum DeviceMetricsMonitorType 在 View 周期中添加性能监控数据,默认不开启
detectFrequency enum DetectFrequency 视图性能监控采样周期,默认 DetectFrequency.normal
globalContext Map 自定义全局参数。添加规则请查阅 冲突字段说明
rumCacheDiscard enum 丢弃策略:FTRUMCacheDiscard.discard 丢弃新数据(默认)、FTRUMCacheDiscard.discardOldest 丢弃旧数据
rumCacheLimitCount number 本地缓存最大 RUM 条目数量限制 [10_000, ),默认 100_000
isInTakeUrl callBack 设置需要过滤的 Resource 条件,使用方式请查阅 数据采集自定义规则

RUM 用户数据追踪

Action

使用方法

/// 添加 action
/// [actionName] action 名称
/// [actionType] action 类型
/// [property] 附加属性参数(可选)
Future<void> startAction(String actionName, String actionType,
  {Map<String, String>? property})

代码示例

FTRUMManager().startAction("action name", "action type");

View

自定义 View

使用方法
/// view 创建,这个方法需要在 [starView] 之前被调用
/// [viewName] 界面名称
/// [duration] 页面加载时长
Future<void> createView(String viewName, int duration)

/// view 开始
/// [viewName] 界面名称
/// [viewReferer] 前一个界面名称
/// [property] 附加属性参数(可选)
Future<void> starView(String viewName, {Map<String, String>? property})

/// view 结束
/// [property] 附加属性参数(可选)
Future<void> stopView({Map<String, String>? property})
代码示例
FTRUMManager().createView("Current Page Name", 100000000);

FTRUMManager().starView("Current Page Name");

FTRUMManager().stopView();

自动页面采集、路由过滤、休眠唤醒监听等规则请查阅 数据采集自定义规则

Error

自动采集

void main() async {
  runZonedGuarded(() async {
    WidgetsFlutterBinding.ensureInitialized();
    await FTMobileFlutter.sdkConfig(
      datakitUrl: serverUrl,
      debug: true,
    );
    await FTRUMManager().setConfig(
      androidAppId: appAndroidId,
      iOSAppId: appIOSId,
    );

    // Flutter 异常捕获
    FlutterError.onError = FTRUMManager().addFlutterError;
    runApp(MyApp());
  }, (Object error, StackTrace stack) {
    // 添加 Error 数据
    FTRUMManager().addError(error, stack);
  });
}

自定义 Error

使用方法
/// 添加自定义错误
/// [stack] 堆栈日志
/// [message] 错误信息
/// [appState] 应用状态
/// [errorType] 自定义 errorType
/// [property] 附加属性参数(可选)
Future<void> addCustomError(String stack, String message,
  {Map<String, String>? property, String? errorType})
代码示例
FTRUMManager().addCustomError("error stack", "error message");

Resource

自动采集

通过 FTRUMManager().setConfig 开启 enableUserResource 来实现。

自定义 Resource

使用方法
/// 开始资源请求
/// [key] 唯一 id
/// [property] 附加属性参数(可选)
Future<void> startResource(String key, {Map<String, String>? property})

/// 结束资源请求
/// [key] 唯一 id
/// [property] 附加属性参数(可选)
Future<void> stopResource(String key, {Map<String, String>? property})

/// 发送资源数据指标
Future<void> addResource({
  required String key,
  required String url,
  required String httpMethod,
  required Map<String, dynamic> requestHeader,
  Map<String, dynamic>? responseHeader,
  String? responseBody = "",
  int? resourceStatus,
})
代码示例
void httpClientGetHttp(String url) async {
  var httpClient = HttpClient();
  String key = Uuid().v4();
  HttpClientResponse? response;
  HttpClientRequest? request;
  try {
    request = await httpClient
        .getUrl(Uri.parse(url))
        .timeout(Duration(seconds: 10));
    FTRUMManager().startResource(key);
    response = await request.close();
  } finally {
    Map<String, dynamic> requestHeader = {};
    Map<String, dynamic> responseHeader = {};

    request!.headers.forEach((name, values) {
      requestHeader[name] = values;
    });
    var responseBody = "";
    if (response != null) {
      response.headers.forEach((name, values) {
        responseHeader[name] = values;
      });
      responseBody = await response.transform(Utf8Decoder()).join();
    }
    FTRUMManager().stopResource(key);
    FTRUMManager().addResource(
      key: key,
      url: request.uri.toString(),
      requestHeader: requestHeader,
      httpMethod: request.method,
      responseHeader: responseHeader,
      resourceStatus: response?.statusCode,
      responseBody: responseBody,
    );
  }
}

使用 http 库与 dio 库,可参考 example

文档评价

文档内容是否对您有帮助? ×