Flutter部署

环境要求

  • Dart Version:2.4.0及以上
  • Flutter Version:1.12.0及以上

嵌码步骤

Flutter嵌码分为两个部分:原生项目嵌码和Flutter插件嵌码。

原生项目嵌码

请确保嵌码App原生部分已集成基调听云SDK,如未集成可参照原生项目部署文档完成嵌码。

Flutter 插件嵌码

添加依赖

  • 添加依赖

    在项目的pubspec.yaml文件中添加基调听云Flutter插件,目前支持远程依赖及本地依赖两种部署方式。

    • 远程依赖

      dependencies:
          tingyun_flutter_plugin: ^1.0.0
      
    • 本地依赖

      dependencies:
          tingyun_flutter_plugin:
              path: tingyun_flutter_plugin //tingyun_flutter_plugin 需替换为本地 TingYun flutter 插件的目录
      
  • 获取插件

    添加依赖后需要在项目「根目录下」执行 flutter packages get 命令。

    说明:iOS 添加依赖需在项目 ios 目录下执行pod install命令。

Flutter 插件初始化

  • 替换 runApp()

    需注释原有的runApp()方法,并添加Tingyun().start(MyApp()方法。

    import 'package:tingyun_flutter_plugin/tingyun_flutter_plugin.dart';
    
    void main() {
        // runApp(MyApp());
        Tingyun().start(MyApp());
    }
    
  • 运行日志

    运行项目工程后控制台会显示以下日志:

    tingyun flutter impl start
    get configure from tingyun:xxx //xxx 为从 native 端 SDK 获取到的功能开关配置情况
    //初始化成功时候显示
    tingyun flutter plugin success!
    //初始化失败时显示
    tingyun flutter plugin failed to initialize. Error: xxx //xxx 为错误描述
    

兼容异常数据

由于 Flutter 只允许单一 handler 收集 error 数据,基调听云提供了相关参数以便兼容 App 自身采集 error 的场景。

  • 控制参数

    我们在tingyun_flutter_plugin初始化方法中提供了两个参数,您可以选择传入相关函数来处理 error。

    /**
    因为flutter error 的捕获机制原因,需要提供2个不同的函数来进行处理,
    onError 是flutter框架没有捕获到的异常的时候,通过runZoned来捕获的error的回调函数
    flutterOnError 是flutter框架通过Flutter.onError来捕获异常的回调函数
    
    @onError: 需要传入原型为 void FunctiononError(Object, StackTrace)的函数, 
    @flutterOnError: 需要传入原型为 void FunctionFlutterError(FlutterErrorDetails details)的函数
    */
    Tingyun().start(MyApp(), {Function onError, Function flutterOnError});
    
  • 代码示例

    void main() => Tingyun().start(MyApp(),onError: onCustomError, flutterOnError: onCustomFlutterError);
    
    void onCustomError(Object object, BuildContext stackTrace){
      print('onCustomError happened');
    }
    
    void onCustomFlutterError(FlutterErrorDetails details){
      print('onCustomFlutterError happened');
    }
    

Android WebView 数据采集

由于操作系统差异,基调听云 iOS SDK 默认支持自动采集 WebView 数据,Android 则需按以下步骤添加相关设置。目前支持自动注入 JS 探针和手动注入 JS 探针两种方式。

  • 自动注入 JS 探针

    需在初始化 SDK 时调用 isHookWebChromeClient(true),SDK 将自动替换 WebChromeClient 并注入 JS 探针。

  • 示例

 ```
 NBSAppAgent.setLicenseKey("Key").setRedirectHost("Host")
            .isHookWebChromeClient(true) // 自动替换 WebChromeClient 并注入 JS 探针
            .start(getApplicationContext());
 ```
  • 手动注入 JS 探针

    需要在 WebChromeClient 中调用基调听云Android SDK 提供的 initJSMonitor() 方法。

  • 示例

    以【 webview_flutter-0.3.24】为例。

    1. 打开 webview_flutter-0.3.24 android 目录下的 build.gradle 文件并添加 TingYun_Android_SDK 依赖。

      dependencies {
          compileOnly "com.networkbench:tingyun-ea-agent-android:2.15.5"   
      }
      
    2. 在 WebChromeClient 中重写 onProgressChanged(),并添加 TingYun_SDK 的 initJSMonitor() 方法。

      private class FlutterWebChromeClient extends WebChromeClient {
      
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
          try {
            Class.forName("com.networkbench.agent.impl.instrumentation.NBSWebChromeClient");
            com.networkbench.agent.impl.instrumentation.NBSWebChromeClient.initJSMonitor(view, newProgress);
          } catch (ClassNotFoundException e) {
            e.printStackTrace();
          }
          super.onProgressChanged(view, newProgress);
        }
        ... ...
      }
      
© 2007-2024 北京基调网络股份有限公司 all right reserved,powered by Gitbook本文档更新于: 2023-11-07 10:58

results matching ""

    No results matching ""