部署说明
环境要求
- 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);
}
... ...
}
-