跳转至

手动接入

不使用 ft-plugin 情况下如何接入 SDK

观测云 使用 Android Gradle Plugin Transformation 实现代码注入,从而实现数据自动采集。但是由于一些兼容性问题,可能存在无法使用 ft-pluginft-plugin-legacy 的情况。受影响范围包括:

  • RUM 中的 ActionResource
  • android.util.Log
  • Java 与 Kotlin println 控制台日志自动抓取
  • 符号文件自动上传

目前针对这种情况,可采用手动集成方案。

Application 启动事件

源码示例参考 DemoForManualSet.kt

// Application
@Override
public void onCreate() {
    super.onCreate();
    // 需要在 SDK 初始化前调用
    FTAutoTrack.startApp(null);
    // 设置 SDK 配置
    setSDK(this);
}
// Application
override fun onCreate() {
    super.onCreate()
    // 需要在 SDK 初始化前调用
    FTAutoTrack.startApp(null)
    // 设置 SDK 配置
    setSDK(this)
}

手动添加用户操作

按键等事件需要在触发处自行添加。这里以 Button onClick 事件为例,源码示例参考 ManualActivity.kt

view.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        FTRUMGlobalManager.get().startAction("[action button]", "click");
    }
});
view.setOnClickListener {
    FTRUMGlobalManager.get().startAction("[action button]", "click")
}

手动接入 OkHttp Resource / Trace

OkHttp 可通过 addInterceptoreventListener 的方式接入 ResourceTrace。示例如下,源码示例参考 ManualActivity.kt

OkHttpClient.Builder builder = new OkHttpClient.Builder()
    .addInterceptor(new FTTraceInterceptor())
    .addInterceptor(new FTResourceInterceptor())
    .eventListenerFactory(new FTResourceEventListener.FTFactory());
//.eventListenerFactory(new FTResourceEventListener.FTFactory(true));
OkHttpClient client = builder.build();
val builder = OkHttpClient.Builder()
    .addInterceptor(FTTraceInterceptor())
    .addInterceptor(FTResourceInterceptor())
    .eventListenerFactory(FTResourceEventListener.FTFactory())
    //.eventListenerFactory(new FTResourceEventListener.FTFactory(true))
val client = builder.build()

其他网络框架需要自行实现 FTRUMGlobalManager.startResourcestopResourceaddResource 以及 FTTraceManager.getTraceHeader。具体实现方式可参考源码示例 ManualActivity.kt

手动接入 OkHttp WebSocket Resource

ft-sdk >= 1.7.5 时,如果未使用支持 WebSocket 自动插桩的 ft-plugin,可通过 FTWebSocket 显式采集 OkHttp WebSocket 握手 Resource。需要先开启 FTRUMConfig.setEnableTraceUserResource(true);现有 Resource URL 过滤和 RUM 采样规则仍然生效。采集仅覆盖握手成功、被服务端拒绝或失败,不统计连接存续时间,也不采集消息内容。

少量调用点可直接使用 FTWebSocket.newWebSocket()

WebSocket socket = FTWebSocket.newWebSocket(okHttpClient, request, listener);
val socket = FTWebSocket.newWebSocket(okHttpClient, request, listener)

如果项目通过依赖注入统一提供 WebSocket factory,可包装一次后注入 WebSocket.Factory

WebSocket.Factory factory = FTWebSocket.wrap(okHttpClient);
WebSocket socket = factory.newWebSocket(request, listener);
val factory: WebSocket.Factory = FTWebSocket.wrap(okHttpClient)
val socket = factory.newWebSocket(request, listener)

wrap() 支持重复调用;即使同时启用了 ft-plugin >= 1.3.8,同一个请求也只会采集一次握手 Resource。如果第三方库在内部持有 OkHttpClient,并且既不开放 newWebSocket() 调用点,也不允许传入 WebSocket.Factory,仍需使用 ft-plugin 自动插桩。

WebView 手动配置

FTAutoTrack.setUpWebView(webview);
//loadUrl 加载操作以前进行配置
FTAutoTrack.setUpWebView(webview)
//loadUrl 加载操作以前进行配置

文档评价

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