ARMS用户体验监控提供一系列SDK配置项,让您能够通过设置参数来满足额外需求。本文介绍Flutter应用常用的SDK配置。
启动配置
start方法是AlibabaCloudRUM Flutter 插件的核心启动方法,负责初始化整个 Flutter 插件监控系统并启动应用程序。
Future<void> start(Widget topLevelWidget, {Function()? beforeRunApp}) async| 参数 | 说明 | 参数限制 | 失败结果 | 
| topLevelWidget | Flutter的根Widget | 非空 | 接口调用失败 | 
| beforeRunApp | 回调函数,在  | 可选,如果设置了该参数,则必须在该回调函数中主动调用 | - | 
示例:
AlibabaCloudRUM().start(
  // 根 Widget
  MyApp(),
  beforeRunApp: () async => {
    // 在当前函数结束前,必须要调用下面这个方法
    WidgetsFlutterBinding.ensureInitialized(),
    // 其他业务逻辑
    // ...
    },
);打印错误信息
当SDK捕获到Flutter异常时,会默认调用FlutterError.dumpErrorToConsole输出错误信息到控制台,您可以通过setDumpError方法开启或关闭。
void setDumpError(bool enable)| 参数 | 说明 | 参数限制 | 失败结果 | 
| enable | 设置是否输出错误信息到控制台。 | 取值: 
 | - | 
示例:
// 禁止输出错误信息到控制台
AlibabaCloudRUM().setDumpError(false);  Flutter错误回调
由于Flutter对错误的监控无法逐层传递,导致AlibabaCloudRUM插件对同步、异步接口进行监控后,应用内原有的错误监听会失效。因此,Flutter插件提供了统一的错误回调接口。
void onRUMErrorCallback(bool callback(Object? error, StackTrace? stack, bool isAsync))回调函数入参:
| 参数 | 类型 | 说明 | 
| error | Object | 错误原因。 | 
| stack | StackTrace | 可选,错误堆栈。 | 
| isAsync | Bool | 可选,是否为异步错误。 | 
回调函数返回值:
| 类型 | 说明 | 
| Bool | 是否继续处理错误。 
 
 | 
示例:
  AlibabaCloudRUM().onRUMErrorCallback((error, stack, isAsync) {
    // 处理error事件
    // ...
    // logger.d('debuggg error: $error, stack: $stack');
    // 返回true,让SDK上报该错误
    return true;
  });自定义用户名称
SDK支持设置与用户相关的信息,从而完成数据分析与实际用户相关联的需求场景。
Future<void> setUserName(String userName)| 参数 | 说明 | 参数限制 | 失败结果 | 
| userName | 用户名称标识 | 字符串可为null或空串。 字符串小于等于256,且不包含特殊字符,只允许数字、字母、英文半角冒号(:)、空格、正斜线(/)、下划线(_)、英文半角连接号(-)、英文半角句号(.)和@。 | 接口调用失败,当次设置无效。 | 
示例:
AlibabaCloudRUM().setUserName("xxxxx");自定义用户扩展信息
SDK支持设置与用户相关的信息,从而完成数据分析与实际用户相关联的需求场景。
- 设置用户扩展信息,为覆写模式,调用该方法会导致历史设置的用户扩展信息被覆盖。 - Future<void> setUserExtraInfo(Map<String, dynamic> extraInfo) async- 参数 - 说明 - 参数限制 - 失败结果 - extraInfo - 用户扩展信息 - Map可为空或空集。转JSON后长度在7000字符以内,否则接口调用失败。 - 接口调用失败,当次设置无效 - 示例: - AlibabaCloudRUM().setUserExtraInfo({"shopId": "xxxxx", "shopName": "yyyyy"});
- 追加用户扩展信息,追加模式。 - Future<void> addUserExtraInfo(Map<String, dynamic> extraInfo) async- 参数 - 说明 - 参数限制 - 失败结果 - extraInfo - 用户扩展信息 - Map可为空或空集。转JSON后长度在7000字符以内,否则接口调用失败。 - 接口调用失败,当次设置无效 - 示例: - AlibabaCloudRUM().addUserExtraInfo({"userId": "11111111"});
自定义全局扩展信息
SDK支持设置与用户相关的信息,从而完成数据分析与实际用户相关联的需求场景。
- 设置全局扩展信息,为覆写模式,调用该方法会导致历史设置的用户扩展信息被覆盖。 - Future<void> setExtraInfo(Map<String, dynamic> extraInfo) async- 参数 - 说明 - 参数限制 - 失败结果 - extraInfo - 全局扩展信息 - Map可为空或空集。转JSON后长度在7000字符以内,否则接口调用失败。 - 接口调用失败,当次设置无效 - 示例: - AlibabaCloudRUM().setExtraInfo({"global_key": "global_value", "global_key2": "global_value2"});
- 追加全局扩展信息,追加模式。 - Future<void> addExtraInfo(Map<String, dynamic> extraInfo) async- 参数 - 说明 - 参数限制 - 失败结果 - extraInfo - 全局扩展信息 - Map可为空或空集。转JSON后长度在7000字符以内,否则接口调用失败。 - 接口调用失败,当次设置无效 - 示例: - AlibabaCloudRUM().addExtraInfo({"global_userId": "2222222222"});
自定义异常
调用自定义异常接口,并传入相应的参数,可完成自定义异常数据的统计功能。
Future<void> setCustomException(String exceptionType, String causedBy, String errorDump)| 参数 | 说明 | 参数限制 | 失败结果 | 
| exceptionType | 异常类型(必要) | 字符串长度大于0且小于等于256。 | 接口调用失败,当次设置无效。 | 
| causedBy | 异常原因(必要) | 字符串小于等于512,超长会截取。 | 不涉及 | 
| errorDump | 异常信息(可选) | 字符串可为null或空串。 字符串小于等于10000,超长会截取。 | 不涉及 | 
示例:
AlibabaCloudRUM().setCustomException("custom exception type", 
    "caused by customer", 
    "Custom error dump");自定义事件
SDK支持上报自定义事件。调用相应的接口,并传入相应的参数,可完成自定义事件数据的统计功能。
Future<void> setCustomEvent(String name, {String? group, String? snapshots, double? value, Map<String, String>? attributes})| 参数 | 说明 | 参数限制 | 失败结果 | 
| name | 事件名称(必要) | 字符串小于等于512,超长会截取。 | 接口调用失败,当次设置无效。 | 
| group | 事件分组(可选) | 字符串可为null或空串。 字符串小于等于256,超长会截取。 | 不涉及 | 
| snapshots | 事件快照(可选) | 字符串可为null或空串。 字符串小于等于7000,超长截取。 | 不涉及 | 
| value | 事件值(可选) | Double类型。 | 不涉及 | 
| attributes | kv存储信息(可选) | 转JSON后长度在7000字符以内。 | 不涉及 | 
示例:
AlibabaCloudRUM().setCustomEvent("search_shop",
    group: "shop",
    snapshots: 'Search: ${search.toString()}',
    value: 1,
    attributes: {"search": "xxxxx"});自定义日志
SDK支持上报自定义日志信息。调用相应的接口,并传入相应的参数,可完成自定义日志数据的统计功能。
Future<void> setCustomLog(String logInfo, {String? name, String? snapshots, String? level, Map<String, String>? attributes})| 参数 | 说明 | 参数限制 | 失败结果 | 
| logInfo | 日志信息(必要) | 字符串长度大于0且小于等于10000,超长截取。 | 接口调用失败,当次设置无效 | 
| name | 日志名称(可选) | 字符串长度大于0且小于等于256 | 不涉及 | 
| snapshots | 日志快照(可选) | 字符串可为null或空串。 字符串小于等于7000,超长会截取。 | 不涉及 | 
| level | 日志等级(可选) | 字符串长度大于0且小于等于256,默认为INFO。 | 不涉及 | 
| attributes | 日志附加信息(可选) | Map可为空或空集。 转JSON后,字符串长度与logInfo共享,否则接口调用失败。 | 不涉及 | 
示例:
AlibabaCloudRUM().setCustomLog("2024-08-20 14:00:05 Print shopinfo info.",
    name: "shop",
    snapshots: 'Shop: ${shop.toString()}',
    level: "DEBUG",
    attributes: {"shopId": "xxxxx", "shopName": "yyyyy"});