Flutter自动追踪插件auto_track的使用
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
更多关于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
插件。以下是一个简单的示例:
- 初始化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(),
);
}
}
- 页面追踪
你可以在页面构建或路由变化时手动调用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'),
),
);
}
}
- 事件追踪
除了页面追踪,你还可以追踪用户事件,比如按钮点击等。
// 在某个按钮点击事件中
ElevatedButton(
onPressed: () {
// 事件追踪
AutoTrack.trackEvent(
eventName: 'button_click',
properties: {
'button_name': 'submit',
},
);
// 其他逻辑,比如提交表单
},
child: Text('Submit'),
)
这个示例展示了如何在Flutter应用中使用auto_track
插件进行页面追踪和事件追踪。请根据你的实际需求调整代码,并查阅auto_track
的官方文档以获取更多高级功能和配置选项。