访客标识 Visitor ID¶
SDK 1.6.8 及以上支持由 SDK 生成并管理匿名访客标识(Visitor ID)。启用后,可向匹配的 URLSession 请求注入自定义请求头,并在 Native RUM 中关联 visitor_id;支持 Native Bridge 的 Web SDK 还可在允许的 WebView 页面中读取当前标识。
该能力默认关闭。Visitor ID 不等同于通过用户绑定 API 设置的 user_id,也不能用作登录凭证或鉴权信息。
初始化配置¶
先完成 SDK 初始化,再将有效的 FTVisitorIDConfig 设置到 FTRumConfig.visitorIDConfig,并启动 RUM。配置需要在 RUM 初始化前完成。
#import <GuanceSDK/GuanceSDK.h>
FTRumConfig *rumConfig = [[FTRumConfig alloc] initWithAppid:appid];
FTVisitorIDConfig *visitorConfig = [[FTVisitorIDConfig alloc] init];
visitorConfig.header = @"x-visitor-id";
visitorConfig.ttlHours = 24;
[visitorConfig addMatchWithURLPrefix:@"https://api.example.com/"];
rumConfig.visitorIDConfig = visitorConfig;
[[FTSDKAgent sharedInstance] startRumWithConfigOptions:rumConfig];
import GuanceSDK
let rumConfig = FTRumConfig(appid: appid)
let visitorConfig = FTVisitorIDConfig()
visitorConfig.header = "x-visitor-id"
visitorConfig.ttlHours = 24
visitorConfig.addMatch(urlPrefix: "https://api.example.com/")
rumConfig.visitorIDConfig = visitorConfig
FTSDKAgent.sharedInstance().startRum(withConfigOptions: rumConfig)
| 配置 | 类型 | 默认值 | 说明 |
|---|---|---|---|
FTRumConfig.visitorIDConfig |
FTVisitorIDConfig |
nil |
不配置时关闭 Visitor ID。配置无效时也不启用该功能 |
FTVisitorIDConfig.header |
NSString |
nil |
必填,自定义的小写 HTTP 请求头名称,如 x-visitor-id。不能占用认证、Cookie、签名、CSRF 或 Trace 等保留请求头 |
FTVisitorIDConfig.ttlHours |
NSTimeInterval |
24 |
固定有效期,单位小时,必须为正的有限数值。读取不会延长有效期 |
还必须添加至少一条有效的 URL 匹配规则。SDK 自行生成标识,不支持由应用传入自定义标识值。
URL 匹配与请求头注入¶
规则只匹配 HTTP(S) URL。多条规则为“或”的关系,命中任意一条即可;规则抛出异常时按未命中处理。
| 方法 | 规则 |
|---|---|
addMatchWithURLPrefix: / Swift addMatch(urlPrefix:) |
匹配完整 URL 字符串前缀,同时要求 scheme、host、有效端口一致。建议为业务 API 使用带路径分隔符的前缀 |
addMatchWithRegularExpression: / Swift addMatch(regularExpression:) |
在完整 URL 字符串中进行正则匹配。需要完整匹配时使用 ^ 与 $ |
addMatchWithHandler: / Swift addMatch(handler:) |
自定义 URL 判断;返回 YES / true 表示命中。回调应快速、线程安全,避免网络、磁盘操作或同步等待 |
NSRegularExpression *expression = [NSRegularExpression
regularExpressionWithPattern:@"^https://api\\.example\\.com/v[12]/"
options:0 error:nil];
[visitorConfig addMatchWithRegularExpression:expression];
[visitorConfig addMatchWithHandler:^BOOL(NSURL *url) {
return [url.host isEqualToString:@"checkout.example.com"];
}];
将这些规则加到配置对象后,再赋给 rumConfig.visitorIDConfig 并启动 RUM。
注入范围是匹配的 URLSession data、upload、download 请求,不代表对进程内所有网络协议进行注入。该功能不依赖 RUM 或 Trace 的采样是否命中,也不要求开启自动 Resource 采集;需要观察对应 Resource 事件时,仍须配置 Resource 采集与采样。
有效期、持久化与重置¶
标识在本地持久化,有效期内重启应用可继续使用。有效期从标识创建时开始计算,不会因访问而滑动续期;到期后,下一次获取标识时会生成新值。卸载应用、清除应用数据等操作可能使本地标识丢失。
需要主动轮换标识时调用:
启用时重置会生成新标识;关闭时重置只清除本地记录。已产生事件及已发起请求保留其发生时捕获的标识,不因后续重置或过期被追溯替换。
WebView 共享¶
Web 页面需要集成支持通过 Native Bridge 获取 Visitor ID 的 Web SDK,且允许建立 WebView Bridge。当前标识按读取时的 Native 状态返回,重置或 TTL 到期后可读取新值。
- URL 匹配规则控制 URLSession 请求是否注入请求头。
FTSDKConfig.allowWebViewHost控制 哪些 WebView 页面可使用自动 Bridge 及读取 Native Visitor ID,与请求 URL 规则分别配置。- Visitor ID 读取只允许主 frame;未启用、配置无效或 host 不允许时不会返回 Native 标识。
在 SDK 初始化前设置 WebView 白名单,示例见 WebView 数据监测。仅配置 Visitor ID 的请求 URL 规则,不会自动限制 WebView 的 host 范围。