Flutter自动追踪插件auto_track的使用

发布于 1周前 作者 nodeper 来自 Flutter

Flutter自动追踪插件auto_track的使用

Flutter全埋点插件,支持Android和iOS。

低侵入全局自动埋点,自动记录页面进入、退出,点击、滑动、HTTP请求等事件,并支持自定义事件。

Getting Started 使用指南

只需在入口配置AutoTrack().config()即可启用全局埋点。

目前仅在移动端验证通过,其他平台暂无验证。

Installation 安装

flutter pub add auto_track

Usage example 使用示例

可直接运行项目中的 example

主要配置

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    AutoTrack()
        .config(AutoTrackConfig( // 其余配置可查看AutoTrackConfig类
            samplingRate: 0.9, // 采样率
            host: 'http://localhost:3000/api/track',
            eventHandler: (model) => {
              // 事件触发会调用此方法,可自行处理
              print('event handler ${model.type}')
            },
            pageConfigs: [
              AutoTrackPageConfig<PageA>(
                pageID: 'page_a', // 配置页面ID,统计时可基于此ID进行统计
              ),
              AutoTrackPageConfig<CupertinoScaffold>( 
                pageID: 'home_tab_page',
                isPageWidget: (page) { // 页面匹配是基于泛型匹配,如果是被其他widget包裹的,需要自行判断
                    if (page.key != null) {
                        if (page.key is ValueKey) {
                            return (page.key! as ValueKey).value == 'home_tab_page';
                        }
                    }
                    return false;
                }
              )
            ]))
        .enable()
        .enableUpload() // 启用数据上传,需设置host
        .enablePageLeave() // 启用页面离开统计
        .enablePageView() // 启用页面进入统计
        .enableClick() // 启用点击统计
        .enableDrag() // 启用滑动统计
        .enableIgnoreNullKey() // 忽略空的key,如果不忽略,没有配置key的页面或事件会基于一定的规则生成一个随机的key进行上报统计
        .enableHttpRequest() // 启用http请求监听
        .enableLog(); // 启用日志,建议在debug模式下开启,会打印一些埋点相关的日志

    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('auto track example app'),
        ),
        body: const Center(
          child: Home(),
        ),
      ),
      navigatorObservers: AutoTrackNavigationObserver.wrap([]), // 需要使用AutoTrackNavigationObserver.wrap去包裹当前使用的navigatorObservers
    );
  }
}

更新采样率

AutoTrack().updateSampleRate(0.5);

登录后更新用户id

AutoTrack().updateUserId('userId'); 

采样错误信息

FlutterError.onError = (details) {
  Track.instance.reportError(details, details.stack!);
};

具体使用

import 'package:flutter/cupertino.dart';

class PageA extends StatelessWidget {
  const PageA({super.key});

  @override
  Widget build(BuildContext context) {
    return Container(
      margin: const EdgeInsets.only(top: 200),
      child: Column(
        children: [
          GestureDetector(  // 如果启用了enableIgnoreNullKey,这里没有配置key的点击事件不会进行记录统计
            onTap: () {
              print("tap page a null key");
            },
            child: const Text('null key'),
          ),
          GestureDetector(
            key: const Key('page-a-click'),
            onTap: () {
              print("tap page a");
              Track.instance.customEvent('custom_event', {'other_param': 'param'}); // 自定义事件发送
            },
            child: const Text('have key'),
          )
        ],
      ),
    );
  }
}

Data upload 数据上报

配置host并启用数据上报后会定时上报数据

数据上报的格式

{
    'app_key': config.appKey ?? '',
    'signature': config.signature!(t), // 签名,可自行配置具体实现的签名算法
    't': t, // 时间戳
    'user_id': config.userId ?? '', // 用户id,用户登录后设置,调用AutoTrack().updateUserId('userId');
    'track_id': config.trackId ?? '', // track_id,每次用户重新打开app会重新生成,在同一个周期内(app打开到关闭)track_id是相同的
    'unique_id': config.uniqueId ?? AutoTrackConfigManager.instance.deviceId, // unique_id,可自行配置,如果不配置,会使用设备id
    'device_id': AutoTrackConfigManager.instance.deviceId, // 设备id,根据deviceInfo获取
    'data_list': uploadList.map((e) => e.toMap()).toList(), // TrackModel数据列表,具体格式参考下方
    'app_version': AutoTrackConfigManager.instance.appVersion, // app版本
    'device_info': AutoTrackConfigManager.instance.deviceInfo // 设备信息
}
// TrackModel
{
    'type': type, //事件类型 page_view | page_leave | click | drag | custom(自定义类型)
    'key': key, // 事件key,如果没有启用enableIgnoreNullKey,没有配置key的地方会基于一定的规则生成一个随机的key
    'time': time, // 事件触发的时间戳
    'params': params, // 事件参数,自定义事件可自行设置参数,页面进入、离开、点击、滑动等事件会自动设置(点击位置、滑动方向、页面停留时间等相关信息)
}

更多关于Flutter自动追踪插件auto_track的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自动追踪插件auto_track的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于Flutter中的auto_track插件的使用,下面是一个基本的代码示例,展示了如何集成和使用这个插件进行自动追踪。请注意,具体的使用细节可能会根据插件版本和具体需求有所不同,但以下示例应该能给你一个良好的起点。

首先,确保你已经在pubspec.yaml文件中添加了auto_track依赖:

dependencies:
  flutter:
    sdk: flutter
  auto_track: ^最新版本号  # 请替换为实际的最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter应用中配置和使用auto_track插件。以下是一个简单的示例:

  1. 初始化AutoTrack

在你的应用的入口文件(通常是main.dart)中初始化AutoTrack

import 'package:flutter/material.dart';
import 'package:auto_track/auto_track.dart';

void main() {
  // 初始化AutoTrack
  AutoTrack.init(
    appId: '你的应用ID', // 替换为你的实际应用ID
    channel: '你的渠道ID', // 替换为你的实际渠道ID
    enableLog: true, // 是否启用日志打印,开发时建议开启,发布时关闭
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}
  1. 页面追踪

你可以在页面构建或路由变化时手动调用AutoTrack的页面追踪方法。虽然auto_track插件可能提供自动页面追踪功能,但这里展示如何手动调用以确保理解。

import 'package:flutter/material.dart';
import 'package:auto_track/auto_track.dart';

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  void initState() {
    super.initState();
    // 页面追踪
    AutoTrack.trackPage(pageName: 'HomePage');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 跳转到另一个页面并追踪
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => SecondPage()),
            );
          },
          child: Text('Go to Second Page'),
        ),
      ),
    );
  }
}

class SecondPage extends StatefulWidget {
  @override
  _SecondPageState createState() => _SecondPageState();
}

class _SecondPageState extends State<SecondPage> {
  @override
  void initState() {
    super.initState();
    // 页面追踪
    AutoTrack.trackPage(pageName: 'SecondPage');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second Page'),
      ),
      body: Center(
        child: Text('This is the second page'),
      ),
    );
  }
}
  1. 事件追踪

除了页面追踪,你还可以追踪用户事件,比如按钮点击等。

// 在某个按钮点击事件中
ElevatedButton(
  onPressed: () {
    // 事件追踪
    AutoTrack.trackEvent(
      eventName: 'button_click',
      properties: {
        'button_name': 'submit',
      },
    );
    // 其他逻辑,比如提交表单
  },
  child: Text('Submit'),
)

这个示例展示了如何在Flutter应用中使用auto_track插件进行页面追踪和事件追踪。请根据你的实际需求调整代码,并查阅auto_track的官方文档以获取更多高级功能和配置选项。

回到顶部