You need to enable JavaScript to run this app.
导航
Flutter SDK接入
最近更新时间:2024.08.30 18:46:19首次发布时间:2021.06.28 17:58:07

本文主要介绍移动端应用接入ve_apm, ve_alog的详细步骤。您在使用时只需要根据下文进行接入、初始化,并在平台上对SDK上报配置进行调整,即可开启监控功能。

注意

Flutter模块不再迭代,当前支持的引擎最高版本为3.10.6。

功能介绍

  • 目前Flutter SDK仅限中国大陆应用使用(不包括港澳台)。
  • Flutter SDK 基本为无侵入式,参考此文档配置SDK ,可以开启如下功能:Dart异常(包括白屏检测)、页面测速(FP、FCP、FMP)与慢页面分析、流畅性和丢帧分析、网络监控、Channel监控、日志回捞等,详情请参见Flutter监控
  • 其他的功能例如启动分析、崩溃分析(native crash)、卡顿、内存等,请参见native SDK接入文档配置使用。详情请参见iOS SDK接入Android SDK接入

注意

  • Flutter的监控数据上报依赖native SDK,因此接入时还需要初始化native SDK。如果您需要使用上述说明的native相关功能,请参见native SDK接入文档先配置native功能,再进行Flutter相关功能接入。

Demo示例

性能监控:https://pub.dev/packages/ve_apm/example
自定义日志:https://pub.dev/packages/ve_alog/example

性能监控

步骤一:配置Native SDK

如果您已经参考iOS SDK接入Android SDK接入完成了Native SDK的接入,可以跳过这个步骤。

  1. 获取SDK包。

    • iOS SDK

      注意

      iOS Podfile为必须配置项,虽然Dart SDK已经包含了相关依赖声明,但是由于iOS SDK发布在私有源,所以需要声明源地址才能正确引入。

      • 在您的应用的Podfile中添加如下的依赖声明,其中Runner为您的应用Target名称。
      • RangersAPM版本号可以以您使用的原生监控引入的版本为准。
      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中已经添加了相关依赖。

      • 在您的应用的 build.gradle 中添加如下依赖声明
      • 版本号以您使用的原生监控引入的版本为准
      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'
      }
      
  2. 配置初始化代码。

    • iOS SDK

      • AppDelegate.mapplication didFinishLaunchingWithOptions:方法中(或者在用户同意隐私政策之后的合适时机)添加如下示例代码。
        {{app_id}}{{app_token}} 须替换为您创建的应用对应的AppID和AppToken,具体请参见 如何查询AppID和AppToken?
      • Native SDK 更新可能导致部分接口变更,如果参考如下代码配置出现错误,可以参考iOS SDK接入进行配置。
        #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

      • 在Application的onCreate中(或者在用户同意隐私政策之后的合适时机)添加如下代码。
        {{app_id}}{{app_token}} 须替换为您创建的应用对应的AppID和AppToken,具体请参见 如何查询AppID和AppToken?
      • Native SDK 更新可能导致部分接口变更,如果参考如下代码配置出现错误,可以参考Android SDK接入进行配置。
        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());
        

步骤二:配置Dart SDK

  1. 获取 SDK 包。
    在您的 pubspec.yaml 文件中添加如下依赖。

    dependencies:
      ve_apm: 3.0.7  //适用于 Flutter 3.0 及以上的引擎版本
    
  2. 配置初始化代码。

    1. 给根视图增加一个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(),
          );
        }
      }
      
    2. 修改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。

    3. 在用户同意隐私政策之后,调用如下方法开启监控日志上报。

      // startVeApmTrace 调用之后,会开始上报性能监控日志
      startVeApmTrace();
      

自定义日志/日志回捞

注意

如果您还未参考性能监控章节完成SDK接入,请先完成前序步骤,否则下述配置可能无法生效。

步骤一:配置Native 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无需额外配置。

步骤二:配置Dart SDK

  1. 在您的pubspec.yaml文件中添加如下依赖。

    dependencies:
      ve_alog: ^0.0.6
    
  2. 调用如下代码完成初始化和自埋点。

    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')
    
  3. 自定义日志不会自动上报,可以创建回捞指令拉取日志。详情请参见回捞

平台监控配置

修改采样率、开关等来控制数据的上报。详情请参见SDK上报配置

上报验证

如果您的接入过程出现异常,或者无法在平台看到数据,请参考Flutter接入异常排查问题。

版本记录

https://pub.dev/packages/ve_apm/changelog