跳转至

RUM 配置

RUM 初始化配置

FTRumConfig *rumConfig = [[FTRumConfig alloc] initWithAppid:appid];
rumConfig.enableTrackAppCrash = YES;
rumConfig.enableTrackAppANR = YES;
rumConfig.enableTrackAppFreeze = YES;
rumConfig.enableTraceUserAction = YES;
rumConfig.enableTraceUserView = YES;
rumConfig.enableTraceUserResource = YES;
rumConfig.errorMonitorType = FTErrorMonitorAll;
rumConfig.deviceMetricsMonitorType = FTDeviceMetricsMonitorAll;
[[FTSDKAgent sharedInstance] startRumWithConfigOptions:rumConfig];
let rumConfig = FTRumConfig(appid: appid)
rumConfig.enableTraceUserAction = true
rumConfig.enableTrackAppANR = true
rumConfig.enableTraceUserView = true
rumConfig.enableTraceUserResource = true
rumConfig.enableTrackAppCrash = true
rumConfig.enableTrackAppFreeze = true
rumConfig.errorMonitorType = .all
rumConfig.deviceMetricsMonitorType = .all
rumConfig.monitorFrequency = .rare
FTSDKAgent.sharedInstance().startRum(withConfigOptions: rumConfig)
属性 类型 必须 含义
appid NSString 用户访问监测应用 ID 唯一标识。对应设置 RUM appid,才会开启 RUM 采集功能,获取 appid 方法
sampleRate int 采样率。取值范围 [0,100]0 表示不采集,100 表示全采集,默认值 100。作用域为同一 session_id 下所有 View、Action、LongTask、Error 数据
enableTrackAppCrash BOOL 设置是否需要采集崩溃日志,默认 NO
enableTrackAppANR BOOL 采集 ANR 卡顿无响应事件,默认 NO
enableTrackAppFreeze BOOL 采集 UI 卡顿事件,默认 NO
enableTraceUserView BOOL 设置是否追踪用户 View 操作,默认 NO
enableTraceUserAction BOOL 设置是否追踪用户 Action 操作,默认 NO
enableTraceUserResource BOOL 设置是否追踪用户网络请求,默认 NO,仅作用于 native http
resourceUrlHandler FTResourceUrlHandler 自定义采集 Resource 规则。默认不过滤,返回 NO 表示采集,返回 YES 表示不采集。详细说明见 数据采集自定义规则
errorMonitorType FTErrorMonitorType 错误事件监控补充类型。在采集的崩溃数据中添加监控信息,默认不设置
monitorFrequency FTMonitorFrequency 视图的性能监控采样周期
deviceMetricsMonitorType FTDeviceMetricsMonitorType 视图的性能监控类型,在采集的 View 数据中添加对应监控项信息,默认不设置
globalContext NSDictionary 添加自定义标签,用于用户监测数据源区分。如果需要使用追踪功能,则参数 keytrack_idvalue 为任意数值。添加规则请查阅 自定义标签使用

RUM 用户数据追踪

可以通过 FTRUMConfig 配置开启自动模式,或手动添加。RUM 相关数据通过 FTGlobalRumManager 单例传入,相关 API 如下。

View

若设置 enableTraceUserView = YES 开启自动采集,SDK 将自动采集 Window 的生命周期。以 Window 的生命周期 -becomeKeyWindow 定义 View 的开始,-resignKeyWindow 定义 View 的结束。

页面名称以 NSStringFromClass(window.contentViewController.class) > NSStringFromClass(window.windowController.class) > NSStringFromClass(window) 的优先顺序来设置。

如果 Window 内的视图十分复杂,您可以使用以下 API 自定义采集。

使用方法

/// 创建页面
///
/// 在 `-startViewWithName` 方法前调用,该方法用于记录页面的加载时间,如果无法获得加载时间该方法可以不调用。
/// - Parameters:
///  - viewName: 页面名称
///  - loadTime: 页面加载时间(纳秒级)
-(void)onCreateView:(NSString *)viewName loadTime:(NSNumber *)loadTime;

/// 进入页面
/// - Parameters:
///  - viewName: 页面名称
///  - property: 事件自定义属性(可选)
-(void)startViewWithName:(NSString *)viewName property:(nullable NSDictionary *)property;

/// 离开页面
/// - Parameter property: 事件自定义属性(可选)
-(void)stopViewWithProperty:(nullable NSDictionary *)property;
/// 创建页面
///
/// 在 `-startViewWithName` 方法前调用,该方法用于记录页面的加载时间,如果无法获得加载时间该方法可以不调用。
/// - Parameters:
///  - viewName: 页面名称
///  - loadTime: 页面加载时间(ns)
open func onCreateView(_ viewName: String, loadTime: NSNumber)

/// 进入页面
/// - Parameters:
///  - viewName: 页面名称
///  - property: 事件自定义属性(可选)
open func startView(withName viewName: String, property: [AnyHashable : Any]?)

/// 离开页面
/// - Parameter property: 事件自定义属性(可选)
open func stopView(withProperty property: [AnyHashable : Any]?)

代码示例

- (void)viewDidAppear{
  [super viewDidAppear];
  [[FTGlobalRumManager sharedManager] startViewWithName:@"TestVC"];
  [[FTGlobalRumManager sharedManager] startViewWithName:@"TestVC" property:@{@"custom_key":@"custom_value"}];
}
-(void)viewDidDisappear{
  [super viewDidDisappear];
  [[FTGlobalRumManager sharedManager] stopView];
  [[FTGlobalRumManager sharedManager] stopViewWithProperty:@{@"custom_key":@"custom_value"}];
}
override func viewDidAppear() {
    super.viewDidAppear()
    FTExternalDataManager.shared().startView(withName: "TestVC")
    FTExternalDataManager.shared().startView(withName: "TestVC", property: ["custom_key":"custom_value"])
}
override func viewDidDisappear() {
    super.viewDidDisappear()
    FTGlobalRumManager.shared().stopView()
    FTGlobalRumManager.shared().stopView(withProperty: ["custom_key":"custom_value"])
}

Action

使用方法

/// 添加 Action 事件
/// - Parameters:
///   - actionName: 事件名称
///   - actionType: 事件类型
///   - property: 事件自定义属性(可选)
- (void)addActionName:(NSString *)actionName actionType:(NSString *)actionType property:(nullable NSDictionary *)property;
/// 添加 Action 事件
/// - Parameters:
///   - actionName: 事件名称
///   - actionType: 事件类型
///   - property: 事件自定义属性(可选)
func addActionName(String, actionType: String, property: [AnyHashable : Any]?)

代码示例

[[FTGlobalRumManager sharedManager] addActionName:@"UITableViewCell click" actionType:@"click"];
[[FTGlobalRumManager sharedManager] addActionName:@"UITableViewCell click" actionType:@"click" property:@{@"custom_key":@"custom_value"}];
FTGlobalRumManager.shared().addActionName("custom_action", actionType: "click")
FTGlobalRumManager.shared().addActionName("custom_action", actionType: "click", property: ["custom_key":"custom_value"])

Error

使用方法

/// 添加 Error 事件
/// - Parameters:
///   - type: error 类型
///   - message: 错误信息
///   - stack: 堆栈信息
///   - property: 事件自定义属性(可选)
- (void)addErrorWithType:(NSString *)type message:(NSString *)message stack:(NSString *)stack property:(nullable NSDictionary *)property;

/// 添加 Error 事件
/// - Parameters:
///   - type: error 类型
///   - state: 程序运行状态
///   - message: 错误信息
///   - stack: 堆栈信息
///   - property: 事件自定义属性(可选)
- (void)addErrorWithType:(NSString *)type state:(FTAppState)state  message:(NSString *)message stack:(NSString *)stack property:(nullable NSDictionary *)property;
/// 添加 Error 事件
/// - Parameters:
///   - type: error 类型
///   - message: 错误信息
///   - stack: 堆栈信息
///   - property: 事件自定义属性(可选)
open func addError(withType: String, message: String, stack: String, property: [AnyHashable : Any]?)

/// 添加 Error 事件
/// - Parameters:
///   - type: error 类型
///   - state: 程序运行状态
///   - message: 错误信息
///   - stack: 堆栈信息
///   - property: 事件自定义属性(可选)
open func addError(withType type: String, state: FTAppState, message: String, stack: String, property: [AnyHashable : Any]?)

代码示例

[[FTGlobalRumManager sharedManager] addErrorWithType:@"type" message:@"message" stack:@"stack"];
[[FTGlobalRumManager sharedManager] addErrorWithType:@"ios_crash" message:@"crash_message" stack:@"crash_stack" property:@{@"custom_key":@"custom_value"}];
[[FTGlobalRumManager sharedManager] addErrorWithType:@"ios_crash" state:FTAppStateUnknown message:@"crash_message" stack:@"crash_stack" property:@{@"custom_key":@"custom_value"}];
FTGlobalRumManager.shared().addError(withType: "custom_type", message: "custom_message", stack: "custom_stack")
FTGlobalRumManager.shared().addError(withType: "custom_type", message: "custom_message", stack: "custom_stack", property: ["custom_key":"custom_value"])
FTGlobalRumManager.shared().addError(withType: "custom_type", state: .unknown, message: "custom_message", stack: "custom_stack", property: ["custom_key":"custom_value"])

LongTask

使用方法

/// 添加卡顿事件
/// - Parameters:
///   - stack: 卡顿堆栈
///   - duration: 卡顿时长(纳秒)
///   - property: 事件自定义属性(可选)
- (void)addLongTaskWithStack:(NSString *)stack duration:(NSNumber *)duration property:(nullable NSDictionary *)property;
/// 添加卡顿事件
/// - Parameters:
///   - stack: 卡顿堆栈
///   - duration: 卡顿时长(纳秒)
///   - property: 事件自定义属性(可选)
func addLongTask(withStack: String, duration: NSNumber, property: [AnyHashable : Any]?)

代码示例

[[FTGlobalRumManager sharedManager] addLongTaskWithStack:@"stack string" duration:@1000000000];
[[FTGlobalRumManager sharedManager] addLongTaskWithStack:@"stack string" duration:@1000000000 property:@{@"custom_key":@"custom_value"}];
FTGlobalRumManager.shared().addLongTask(withStack: "stack string", duration: 1000000000)
FTGlobalRumManager.shared().addLongTask(withStack: "stack string", duration: 1000000000, property: ["custom_key":"custom_value"])

Resource

使用方法

/// HTTP 请求开始
/// - Parameters:
///   - key: 请求标识
///   - property: 事件自定义属性(可选)
- (void)startResourceWithKey:(NSString *)key property:(nullable NSDictionary *)property;

/// HTTP 添加请求数据
///
/// - Parameters:
///   - key: 请求标识
///   - metrics: 请求相关性能属性
///   - content: 请求相关数据
- (void)addResourceWithKey:(NSString *)key metrics:(nullable FTResourceMetricsModel *)metrics content:(FTResourceContentModel *)content;

/// HTTP 请求结束
/// - Parameters:
///   - key: 请求标识
///   - property: 事件自定义属性(可选)
- (void)stopResourceWithKey:(NSString *)key property:(nullable NSDictionary *)property;
/// HTTP 请求开始
/// - Parameters:
///   - key: 请求标识
///   - property: 事件自定义属性(可选)
open func startResource(withKey key: String, property: [AnyHashable : Any]?)

/// HTTP 请求结束
/// - Parameters:
///   - key: 请求标识
///   - property: 事件自定义属性(可选)
open func stopResource(withKey key: String, property: [AnyHashable : Any]?)

/// HTTP 添加请求数据
///
/// - Parameters:
///   - key: 请求标识
///   - metrics: 请求相关性能属性
///   - content: 请求相关数据
open func addResource(withKey key: String, metrics: FTResourceMetricsModel?, content: FTResourceContentModel)

代码示例

#import "FTMacOSSDK.h"

[[FTGlobalRumManager sharedManager] startResourceWithKey:key];
[[FTGlobalRumManager sharedManager] stopResourceWithKey:key];

FTResourceContentModel *content = [[FTResourceContentModel alloc] init];
content.httpMethod = request.HTTPMethod;
content.requestHeader = request.allHTTPHeaderFields;
content.responseHeader = httpResponse.allHeaderFields;
content.httpStatusCode = httpResponse.statusCode;
content.responseBody = responseBody;
content.error = error;

FTResourceMetricsModel *metricsModel = [[FTResourceMetricsModel alloc] initWithTaskMetrics:metrics];
metricsModel = [[FTResourceMetricsModel alloc] init];

[[FTGlobalRumManager sharedManager] addResourceWithKey:key metrics:metricsModel content:content];
import FTMacOSSDK

FTGlobalRumManager.shared().startResource(withKey: key)
FTGlobalRumManager.shared().stopResource(withKey: resource.key)

let contentModel = FTResourceContentModel(request: task.currentRequest!, response: task.response as? HTTPURLResponse, data: resource.data, error: error)

var metricsModel: FTResourceMetricsModel?
if let metrics = resource.metrics {
   metricsModel = FTResourceMetricsModel(taskMetrics: metrics)
}
metricsModel = FTResourceMetricsModel()

FTGlobalRumManager.shared().addResource(withKey: resource.key, metrics: metricsModel, content: contentModel)

文档评价

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