Flutter部署
环境要求
- Dart Version:2.4.0及以上
- Flutter Version:1.12.0及以上
嵌码步骤
Flutter嵌码分为两个部分:原生项目嵌码和Flutter插件嵌码。
原生项目嵌码
请确保嵌码App原生部分已集成基调听云SDK,如未集成可参照原生项目部署文档完成嵌码。
-
说明:由于Flutter插件嵌码会通过 pod install 引入 iOS SDK,所以请从
添加基调听云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】为例。
打开 webview_flutter-0.3.24 android 目录下的 build.gradle 文件并添加 TingYun_Android_SDK 依赖。
dependencies { compileOnly "com.networkbench:tingyun-ea-agent-android:2.15.5" }
在 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); } ... ... }