UIViewController 或 SwiftUI View。如果您想手动追踪特定的视图或为自动追踪的视图添加自定义时间和属性,可以使用 RUM iOS SDK 提供的 API。RUMMonitor.shared().startView(key:name:attributes:) 开始追踪新的 RUM 视图。同一 key 的所有视图将被分组在 RUM Explorer 中。RUMMonitor.shared().stopView(key:attributes:) 停止追踪。@import FlashcatObjc;
// in your `UIViewController`:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[[RUMMonitor shared] startViewWithKey:@"view-key" name:@"View Name" attributes:@{@"foo": @"bar"}];
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[[RUMMonitor shared] stopViewWithKey:@"view-key" attributes:@{@"foo": @"bar"}];
}RUMMonitor.shared().addAction(type:name:attributes:):@import FlashcatObjc;
- (IBAction)didTapDownloadResourceButton:(UIButton *)sender {
[[RUMMonitor shared] addActionWithType:RUMActionTypeTap name:sender.currentTitle attributes:@{@"resource_id": @"123"}];
}RUMMonitor.shared().addAction(type:name:attributes:) 时,RUM SDK 会创建一个 RUM 操作,并将所有新的资源、错误和长任务附加到此操作,直到视图被视为已完成加载。URLSession 发起的网络请求。如果您想手动追踪自定义资源(如网络请求、第三方提供商的 API、GraphQL 查询等),可以使用以下方法:RUMMonitor.shared().startResource(resourceKey:request:attributes:) 开始加载资源,然后调用 RUMMonitor.shared().stopResource(resourceKey:response:size:attributes:) 在加载完成时停止,或调用 RUMMonitor.shared().stopResourceWithError(resourceKey:error:attributes:) 在加载失败时停止:@import FlashcatObjc;
// in your network client:
[[RUMMonitor shared] startResourceWithResourceKey:@"resource-key" request:request attributes:@{@"foo": @"bar"}];
[[RUMMonitor shared] stopResourceWithResourceKey:@"resource-key" response:response size:size attributes:@{@"foo": @"bar"}];resourceKey 必须唯一,才能使 RUM iOS SDK 将资源的开始与其完成匹配。RUMMonitor:@import FlashcatObjc;
[[RUMMonitor shared] addErrorWithMessage:@"Error message"
type:@"ErrorType"
source:DDRUMErrorSourceCustom
stack:@"Error stack trace"
attributes:@{@"foo": @"bar"}
file:file
line:line];RUMMonitor.shared().addAttribute(forKey:value:):@import FlashcatObjc;
[[RUMMonitor shared] addAttributeForKey:@"user_plan" value:@"premium"];date, error.kind, error.message, error.stack, error.source_type, view.id, view.url, view.loading_time, view.referrer, application.id。RUMMonitor.shared().removeAttribute(forKey:):@import FlashcatObjc;
[[RUMMonitor shared] removeAttributeForKey:@"user_plan"];usr.id (字符串): 唯一用户标识符usr.name (字符串): 用户友好名称,默认在 RUM UI 中显示usr.email (字符串): 用户电子邮件,若无名称则显示邮件Flashcat.setUserInfo(id:name:email:extraInfo:):@import FlashcatObjc;
[Flashcat setUserInfoWithId:@"1234"
name:@"John Doe"
email:@"john@doe.com"
extraInfo:@{@"plan": @"premium", @"signup_date": @"2024-01-15"}];trackBackgroundEvents 设置:@import FlashcatObjc;
DDRUMConfiguration *configuration = [[DDRUMConfiguration alloc] initWithApplicationID:@"<RUM_APPLICATION_ID>"];
configuration.trackBackgroundEvents = YES;
[RUM enableWith:configuration];| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
clientToken | String | 是 | 客户端令牌 |
env | String | 是 | 环境名称 |
site | Flashcat.Site | 是 | 数据上报站点 (.us1, .us3, .us5, .eu1, .ap1) |
service | String | 否 | 服务名称,默认为应用 bundle 标识符 |
batchSize | BatchSize | 否 | 批量上传数据大小,可选: .small, .medium, .large |
uploadFrequency | UploadFrequency | 否 | 数据上传频率,可选: .frequent, .average, .rare |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
applicationID | String | 是 | RUM 应用 ID |
sessionSampleRate | Float | 否 | 会话采样率 (0-100),默认 100 |
uiKitViewsPredicate | UIKitRUMViewsPredicate | 否 | UIKit 视图追踪策略 |
uiKitActionsPredicate | UIKitRUMActionsPredicate | 否 | UIKit 操作追踪策 略 |
swiftUIViewsPredicate | SwiftUIRUMViewsPredicate | 否 | SwiftUI 视图追踪策略 |
swiftUIActionsPredicate | SwiftUIRUMActionsPredicate | 否 | SwiftUI 操作追踪策略 |
urlSessionTracking | URLSessionTracking | 否 | URLSession 网络请求追踪配置 |
trackBackgroundEvents | Bool | 否 | 是否追踪后台事件,默认 false |
trackFrustrations | Bool | 否 | 是否追踪用户挫败感(如错误点击),默认 true |
trackLongTasks | Bool | 否 | 是否追踪长任务,默认 true |
longTaskThreshold | TimeInterval | 否 | 长任务阈值(秒),默认 0.1 秒 |
vitalsUpdateFrequency | VitalsFrequency | 否 | 性能指标更新频率,可选: .frequent, .average, .rare, .never |
uiKitViewsPredicate 或 swiftUIViewsPredicate。DefaultUIKitRUMViewsPredicate 类:DefaultSwiftUIRUMViewsPredicate 类:predicate 来自定义追踪行为。uiKitActionsPredicate 或 swiftUIActionsPredicate。urlSessionTracking 并启用 URLSessionInstrumentation:firstPartyHostsTracing 以启用分布式追踪,将 RUM 资源与后端 traces 关联:throw 的错误@import FlashcatObjc;
DDRUMConfiguration *configuration = [[DDRUMConfiguration alloc] initWithApplicationID:@"<RUM_APPLICATION_ID>"];
[configuration setViewEventMapper:^DDRUMViewEvent * _Nonnull(DDRUMViewEvent * _Nonnull RUMViewEvent) {
return RUMViewEvent;
}];
[configuration setErrorEventMapper:^DDRUMErrorEvent * _Nullable(DDRUMErrorEvent * _Nonnull RUMErrorEvent) {
return RUMErrorEvent;
}];
[configuration setResourceEventMapper:^DDRUMResourceEvent * _Nullable(DDRUMResourceEvent * _Nonnull RUMResourceEvent) {
return RUMResourceEvent;
}];
[configuration setActionEventMapper:^DDRUMActionEvent * _Nullable(DDRUMActionEvent * _Nonnull RUMActionEvent) {
return RUMActionEvent;
}];
[configuration setLongTaskEventMapper:^DDRUMLongTaskEvent * _Nullable(DDRUMLongTaskEvent * _Nonnull RUMLongTaskEvent) {
return RUMLongTaskEvent;
}];(T) -> T? 的 Swift 闭包,其中 T 是具体的 RUM 事件类型。这允许在事件发送之前更改部分事件。url 中的敏感信息,实现一个自定义的 redacted(_:) -> String 函数并在 resourceEventMapper 中使用它:DDRUMConfiguration *configuration = [[DDRUMConfiguration alloc] initWithApplicationID:@"<RUM_APPLICATION_ID>"];
[configuration setResourceEventMapper:^DDRUMResourceEvent * _Nullable(DDRUMResourceEvent * _Nonnull RUMResourceEvent) {
return RUMResourceEvent;
}];nil 将完全丢弃该事件;该事件不会发送到 FlashCat。从 view 事件映射器返回的值不能为 nil(要丢弃视图,请自定义 UIKitRUMViewsPredicate 的实现;详见追踪视图自动化)。| 事件类型 | 属性键 | 说明 |
|---|---|---|
| RUMActionEvent | RUMActionEvent.action.target?.name | 操作名称 |
RUMActionEvent.view.url | 与此操作关联的视图 URL | |
| RUMErrorEvent | RUMErrorEvent.error.message | 错误消息 |
RUMErrorEvent.error.stack | 错误堆栈跟踪 | |
RUMErrorEvent.error.resource?.url | 错误引用的资源 URL | |
RUMErrorEvent.view.url | 与此错误关联的视图 URL | |
| RUMResourceEvent | RUMResourceEvent.resource.url | 资源 URL |
RUMResourceEvent.view.url | 与此资源关联的视图 URL | |
| RUMViewEvent | RUMViewEvent.view.name | 视图名称 |
RUMViewEvent.view.url | 视图 URL | |
RUMViewEvent.view.referrer | 链接到页面初始视图的 URL |
sessionStarted 事件:@import FlashcatObjc;
[[RUMMonitor shared] currentSessionIDWithCompletion:^(NSString * _Nullable sessionId) {
// use session ID
}];trackingConsent 设置可以是以下值之一:.pending: FlashCat iOS SDK 开始收集和批处理数据,但不发送到 FlashCat。FlashCat iOS SDK 等待新的追踪同意值来决定如何处理批处理的数据。.granted: FlashCat iOS SDK 开始收集数据并发送到 FlashCat。.notGranted: FlashCat iOS SDK 不收集任何数据。不会发送日志、traces 或 RUM 事件到 FlashCat。Flashcat.set(trackingConsent:) API 调用。FlashCat iOS SDK 会根据新值更改其行为。.pending:.granted,FlashCat iOS SDK 将发送所有当前和未来的数据到 FlashCat;.notGranted,FlashCat iOS SDK 将清除所有当前数据并且不收集未来的数据。@import FlashcatObjc;
[Flashcat setWithTrackingConsent:DDTrackingConsentGranted];Flashcat.addUserExtraInfo(_:) API 将额外的用户属性附加到先前设置的属性上。@import FlashcatObjc;
[Flashcat addUserExtraInfo:@{@"company": @"FlashCat"}];Flashcat.clearAllData() API:@import FlashcatObjc;
[Flashcat clearAllData];Flashcat.stopInstance() API 停止命名的 SDK 实例(如果名称为 nil 则停止默认实例)进一步收集和上传数据。@import FlashcatObjc;
[Flashcat stopInstance];sessionSampleRate 参数设置采样率(百分比)来减少收集的会话数量。例如,采集 90% 的会话:@import FlashcatObjc;
DDRUMConfiguration *configuration = [[DDRUMConfiguration alloc] initWithApplicationID:@"<RUM_APPLICATION_ID>"];
configuration.sessionSampleRate = 90;
[RUM enableWith:configuration];firstPartyHostsTracing 来配置当前应用的 API 服务域名:@import FlashcatObjc;
DDRUMConfiguration *configuration = [[DDRUMConfiguration alloc] initWithApplicationID:@"<RUM_APPLICATION_ID>"];
DDURLSessionTracking *urlSessionTracking = [DDURLSessionTracking new];
[urlSessionTracking setFirstPartyHostsTracing:[DDRUMFirstPartyHostsTracing alloc] initWithHosts:@[@"api.example.com", @"example.com"] sampleRate:20];
configuration.urlSessionTracking = urlSessionTracking;
[RUM enableWith:configuration];
[DDURLSessionInstrumentation enableWithConfiguration:[DDURLSessionInstrumentationConfiguration alloc] initWithDelegateClass:[SessionDelegate class]]];hosts: 需要追踪的域名列表sampleRate: 要追踪的请求百分比(0-100),默认 100traceparent、tracestate)实现,以下是对相应 header 的说明:traceparent: [version]-[trace id]-[parent id]-[trace flags]version: 当前为 00trace id: 128 bits 的 trace ID 通过 16 进制处理后变成 32 个字符parent id: 64 bits 的 span ID,16 进制处理后为 16 个字符trace flags: 代表是否有降采样,01 代表命中采样,00 代表非采样tracestate: dd=s:[sampling priority];o:[origin]sampling priority: 1 代表 trace 被采样origin: 始终为 rum,代表通过 RUM SDK 采集traceparent: 00-00000000000000008448eb211c80319c-b7ad6b7169203331-01
tracestate: dd=s:1;o:rumapplicationID 和 clientToken,以避免数据上传失败ViewsPredicate