本文主要介绍移动端应用接入ve_apm, ve_alog的详细步骤。您在使用时只需要根据下文进行接入、初始化,并在平台上对SDK上报配置进行调整,即可开启监控功能。
注意
Flutter模块不再迭代,当前支持的引擎最高版本为3.10.6。
注意
性能监控:https://pub.dev/packages/ve_apm/example
自定义日志:https://pub.dev/packages/ve_alog/example
如果您已经参考iOS SDK接入和Android SDK接入完成了Native SDK的接入,可以跳过这个步骤。
获取SDK包。
iOS SDK
注意
iOS Podfile为必须配置项,虽然Dart SDK已经包含了相关依赖声明,但是由于iOS SDK发布在私有源,所以需要声明源地址才能正确引入。
target 'Runner' do pod 'RangersAPM', '3.3.2', :source => 'https://github.com/volcengine/volcengine-specs.git', :subspecs => [ 'Flutter', 'CN' ] flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) end
Android SDK
说明
build.gradle为可选配置项,Dart SDK中已经添加了相关依赖。
buildscript { repositories { maven { url 'https://artifact.bytedance.com/repository/Volcengine/' content { excludeGroup 'io.flutter' } } } } rootProject.allprojects { repositories { maven { url 'https://artifact.bytedance.com/repository/Volcengine/' content { excludeGroup 'io.flutter' } } } } dependencies { implementation 'com.volcengine:apm_insight:1.5.0.cn' * implementation 'com.volcengine:apm_insight_crash:1.4.7' }
配置初始化代码。
iOS SDK
AppDelegate.m
的application didFinishLaunchingWithOptions:
方法中(或者在用户同意隐私政策之后的合适时机)添加如下示例代码。{{app_id}}
和 {{app_token}}
须替换为您创建的应用对应的AppID和AppToken,具体请参见 如何查询AppID和AppToken?#import <RangersAPM+Flutter.h> - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [GeneratedPluginRegistrant registerWithRegistry:self]; RangersAPMConfig *apmConfig = [RangersAPMConfig configWithAppID:@"{{app_id}}" appToken:@"{{app_token}}"]; apmConfig.channel = @"App Store"; apmConfig.deviceIDSource = RAPMDeviceIDSourceFromAPMService; // 以下代码会开启数据采集,必须在用户同意隐私政策之后调用 [RangersAPM startWithConfig:apmConfig]; [RangersAPM setUserID: @"xxxx"]; //可选 return [super application:application didFinishLaunchingWithOptions:launchOptions]; }
Android SDK
onCreate
中(或者在用户同意隐私政策之后的合适时机)添加如下代码。{{app_id}}
和 {{app_token}}
须替换为您创建的应用对应的AppID和AppToken,具体请参见 如何查询AppID和AppToken?MonitorCrash.Config config = MonitorCrash.Config.app({{AppId}}) .token({{AppToken}})// 设置鉴权token,可从平台应用信息处获取,token错误无法上报数据 // .versionCode(1)// 可选,默认取PackageInfo中的versionCode // .versionName("1.0")// 可选,默认取PackageInfo中的versionName // .channel("test")// 可选,设置App发布渠道,在平台可以筛选 // .autoStart(false) // 是否在初始化时自动开启监控,默认为true // .debugMode(true) //线下使用的日志开关,线上不要调用或设置为false .build(); MonitorCrash monitorCrash = MonitorCrash.init(ApplicationContext, config); // 启动监控,当初始化时autoStart传入false设置为初始化时不自动开启监控,需要在合适的位置调用start方法开启监控;如果初始化时未设置autoStart参数或者设置为true,将自动开启监控,不需要调用start方法。 if (monitorCrash != null) { monitorCrash.start(); } //必须放到Application的onCreate里面,会注册监听生命周期,不涉及数据采集和隐私合规问题 ApmInsight.getInstance().init(application); //在同意隐私合规后调用 ApmInsightInitConfig.Builder builder = ApmInsightInitConfig.builder(); //设置分配的appid builder.aid({{app_id}}); //设置分配的AppToken builder.token({{AppToken}}); //是否打印日志,注:线上release版本要配置为false builder.debugMode(true); //设置渠道。1.3.16版本增加接口 builder.channel("google play"); //设置数据和Rangers Applog数据打通,设备标识did必填。1.3.16版本增加接口 builder.setDynamicParams(new IDynamicParams() { @Override public String getDid() { //1.4.0版本及以上可选,其他版本必填。设备的唯一标识,如果依赖AppLog可以通过 AppLog.getDid() 获取,也可以自己生成。getDid是回调类的参数可以初始化后再设置。 return null; } @Override public String getUserId() { //可选。用户的唯一标识,支持用户自定义user_id把平台数据和自己用户关联起来。getUserId是回调类的参数可以初始化后再设置。 return "userid"; } }); ApmInsight.getInstance().start(builder.build());
获取 SDK 包。
在您的 pubspec.yaml
文件中添加如下依赖。
dependencies: ve_apm: 3.0.7 //适用于 Flutter 3.0 及以上的引擎版本
配置初始化代码。
给根视图增加一个NavigatorObserver
变量,并在构造时传递给NavigatorObservers
,其他保持不变。
您的 原始代码:
class MyApp extends StatefulWidget { @override _MyAppState createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, visualDensity: VisualDensity.adaptivePlatformDensity, ), home: HomePage(), routes: generateRoutes(), ); } }
变更之后的代码
class MyApp extends StatefulWidget { const MyApp([this._navigatorObserver]); final NavigatorObserver? _navigatorObserver; @override _MyAppState createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, visualDensity: VisualDensity.adaptivePlatformDensity, ), home: HomePage(), navigatorObservers: <NavigatorObserver>[ widget._navigatorObserver ?? ApmNavigatorObserver.instance ], routes: generateRoutes(), ); } }
修改main函数,替换入口函数为runAppWithoutTrace,并把 observer
传递给根视图。
您的 原始代码
void main() { runApp(MyApp()); }
变更之后的代码
void main() { // runAppWithoutTrace 调用之后,不会上报性能监控日志 runAppWithoutTrace((NavigatorObserver observer) { HttpOverrides.global = ApmHttpOverrides(); // 网络监控 enableVeApmLog(true); // 控制台日志开关,默认为 true return MyApp(observer); }); }
说明
业务如果需要设置自己的HttpOverride,可以通过ApmHttpOverrides的customHttpOverrides变量进行设置。比如:HttpOverrides.global = ApmHttpOverrides(customHttpOverrides: DebugHttpOverride());
,其中DebugHttpOverride是业务自定义的HttpOverride。
在用户同意隐私政策之后,调用如下方法开启监控日志上报。
// startVeApmTrace 调用之后,会开始上报性能监控日志 startVeApmTrace();
注意
如果您还未参考性能监控章节完成SDK接入,请先完成前序步骤,否则下述配置可能无法生效。
iOS配置
在您的Podfile中添加APMLog。
target 'Runner' do pod 'RangersAPM', '3.3.2', :source => 'https://github.com/volcengine/volcengine-specs.git', :subspecs => [ 'Flutter', 'CN', 'APMLog' ] flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) end
Android无需额外配置。
在您的pubspec.yaml
文件中添加如下依赖。
dependencies: ve_alog: ^0.0.6
调用如下代码完成初始化和自埋点。
import 'package:ve_alog/ve_alog.dart'; // 开启自定义日志功能,只需要调用一次 alog.enable(); // 启动控制台日志,当记录自定义日志时会同时向控制台打印,只需要调用一次 alog.enableConsoleLog(); // 以下接口在您需要记录日志的时候调用即可,对应不同等级的日志 // tag: 业务标识 message: 日志内容 alog.debug(tag: 'test', message: 'debug'); alog.info(tag: 'test', message: 'info'); alog.warn(tag: 'test', message: 'warn'); alog.error(tag: 'test', message: 'error')
自定义日志不会自动上报,可以创建回捞指令拉取日志。详情请参见回捞。
修改采样率、开关等来控制数据的上报。详情请参见SDK上报配置。
如果您的接入过程出现异常,或者无法在平台看到数据,请参考Flutter接入异常排查问题。