Flutter数据分析跟踪插件snowplow_flutter_tracker的使用
Flutter数据分析跟踪插件snowplow_flutter_tracker的使用
概述
snowplow_flutter_tracker
是一个Flutter插件,允许你在应用程序中集成Snowplow分析功能。通过这个插件,你可以从Flutter应用程序、游戏或框架中收集事件数据。
开始使用
1. 初始化跟踪器
首先,你需要初始化跟踪器并设置发射器(Emitter)。发射器负责将事件发送到Snowplow服务器。以下是初始化的示例代码:
import 'package:snowplow_flutter_tracker/snowplow_flutter_tracker.dart';
void main() {
// 创建发射器,指定Snowplow服务器的URL
final emitter = Emitter(uri: 'your-collector-endpoint-url');
// 创建跟踪器,设置命名空间和应用ID
final tracker = Tracker(
emitter: emitter,
namespace: 'your-namespace',
appId: 'your-appId',
logLevel: LogLevel.verbose, // 设置日志级别为详细
);
// 初始化Snowplow跟踪器
final _tracker = SnowplowFlutterTracker(tracker);
_tracker.initialize();
runApp(MyApp());
}
2. 发送自定义事件
你可以通过SelfDescribing
类发送自定义事件。以下是一个发送自定义事件的示例:
final selfDescribingJson = SelfDescribingJson(
schema: 'iglu:com.acme/event/jsonschema/1-0-0', // 自定义事件的Schema
payload: <String, Object>{'message': 'hello world'}, // 事件的有效负载
);
final selfDescribing = SelfDescribing(selfDescribingJson);
_tracker.track(selfDescribing); // 发送自定义事件
3. 发送结构化事件
结构化事件用于记录特定的用户操作。以下是一个发送结构化事件的示例:
final structured = Structured(
category: 'shop', // 事件类别
action: 'add-to-basket', // 事件动作
label: 'Add To Basket', // 事件标签
property: 'pcs', // 事件属性
value: 2.00, // 事件值
);
_tracker.track(structured); // 发送结构化事件
4. 发送屏幕视图事件
屏幕视图事件用于记录用户查看某个页面或屏幕。以下是一个发送屏幕视图事件的示例:
final screenView = ScreenView(
name: 'home', // 屏幕名称
type: 'full', // 屏幕类型
transitionType: 'none', // 过渡类型
previousName: '', // 上一个屏幕名称
previousType: '', // 上一个屏幕类型
);
_tracker.track(screenView); // 发送屏幕视图事件
5. 发送页面视图事件
页面视图事件用于记录用户查看某个网页。以下是一个发送页面视图事件的示例:
final pageView = PageViewEvent(
pageUrl: 'https://www.google.com/', // 页面URL
pageTitle: 'Google', // 页面标题
);
_tracker.track(pageView); // 发送页面视图事件
6. 发送计时事件
计时事件用于记录某个操作的持续时间。以下是一个发送计时事件的示例:
final timing = Timing(
category: 'category', // 事件类别
variable: 'variable', // 计时变量
timing: 1, // 计时值(毫秒)
label: 'label', // 事件标签
);
_tracker.track(timing); // 发送计时事件
7. 发送电子商务交易事件
电子商务交易事件用于记录用户的购买行为。以下是一个发送电子商务交易事件的示例:
final item = EcommerceTransactionItem(
itemId: 'item_id_1', // 商品ID
sku: 'item_sku_1', // 商品SKU
price: 1.00, // 商品价格
quantity: 1, // 商品数量
name: 'item_name', // 商品名称
category: 'item_category', // 商品类别
currency: 'currency', // 货币类型
);
final ecommerceTransaction = EcommerceTransaction(
orderId: '6a8078be', // 订单ID
totalValue: 300.00, // 总金额
affiliation: 'my_affiliate', // 关联信息
taxValue: 30.00, // 税费
shipping: 10.00, // 运费
city: 'Boston', // 城市
state: 'Massachusetts', // 州
country: 'USA', // 国家
currency: 'USD', // 货币类型
items: [item], // 商品列表
);
_tracker.track(ecommerceTransaction); // 发送电子商务交易事件
8. 发送同意授予事件
同意授予事件用于记录用户授予某些权限的行为。以下是一个发送同意授予事件的示例:
final consentDocuments = [
ConsentDocument(
documentId: 'doc-id1', // 文档ID
documentVersion: '1', // 文档版本
documentName: 'doc-name1', // 文档名称
documentDescription: 'doc-description1', // 文档描述
),
];
final consentGranted = ConsentGranted(
documentId: '1234', // 文档ID
documentVersion: '5', // 文档版本
expiry: 'Monday, 19-Aug-05 15:52:01 UTC', // 到期时间
documentName: 'Consent document', // 文档名称
documentDescription: 'An example description', // 文档描述
consentDocuments: consentDocuments, // 同意的文档列表
);
_tracker.track(consentGranted); // 发送同意授予事件
9. 发送同意撤回事件
同意撤回事件用于记录用户撤回某些权限的行为。以下是一个发送同意撤回事件的示例:
final consentDocuments = [
ConsentDocument(
documentId: 'doc-id1', // 文档ID
documentVersion: '1', // 文档版本
documentName: 'doc-name1', // 文档名称
documentDescription: 'doc-description1', // 文档描述
),
];
final consentWithdrawn = ConsentWithdrawn(
all: false, // 是否撤回所有权限
documentId: '1234', // 文档ID
documentVersion: '5', // 文档版本
documentName: 'Consent document', // 文档名称
documentDescription: 'An example description', // 文档描述
consentDocuments: consentDocuments, // 撤回的文档列表
);
_tracker.track(consentWithdrawn); // 发送同意撤回事件
10. 发送推送通知事件
推送通知事件用于记录用户接收到的推送通知。以下是一个发送推送通知事件的示例:
final notificationContent = NotificationContent(
title: 'You received a new message', // 通知标题
body: 'You received a new message', // 通知内容
badge: 1, // 通知角标
);
final pushNotification = PushNotification(
action: 'Message Received', // 通知动作
deliveryDate: DateTime.now().toString(), // 通知送达时间
trigger: 'message_received', // 触发条件
categoryIdentifier: '1', // 类别标识符
threadIdentifier: '1', // 线程标识符
notificationContent: notificationContent, // 通知内容
);
_tracker.track(pushNotification); // 发送推送通知事件
本地测试
通常运行Snowplow服务器需要在AWS或Google Cloud上部署。为了简化本地测试,你可以使用Snowplow Dummy Server
。这个服务器会将请求打印到控制台,帮助你验证应用是否配置正确。
-
进入服务器目录:
cd snowplow_dummy_server
-
启动服务器,默认运行在
127.0.0.1:8080
:dart bin/main.dart
-
在示例应用中,默认情况下会向
127.0.0.1:8080
发送请求。这在使用iOS模拟器时效果良好。如果你使用物理设备或Android模拟器,你需要使用代理。
完整示例Demo
以下是一个完整的示例应用,展示了如何使用snowplow_flutter_tracker
插件来发送各种类型的事件:
import 'package:flutter/material.dart';
import 'package:snowplow_flutter_tracker/snowplow_flutter_tracker.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late SnowplowFlutterTracker _tracker;
[@override](/user/override)
void initState() {
// 尝试使用运行在localhost上的snowplow_dummy_server。这在使用iOS模拟器时效果良好。
// 如果使用物理设备或Android模拟器,你需要使用代理。
// 你也可以将其更改为自己的Snowplow服务器。
final emitter = Emitter(uri: '127.0.0.1:8080');
final tracker = Tracker(
emitter: emitter,
namespace: 'your-namespace',
appId: 'your-appId',
logLevel: LogLevel.verbose,
);
_tracker = SnowplowFlutterTracker(tracker);
_tracker.initialize();
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Snowplow Flutter Tracker Example'),
),
body: SingleChildScrollView(
padding: const EdgeInsets.symmetric(vertical: 24.0),
child: Center(
child: Column(
children: <Widget>[
ElevatedButton(
onPressed: () {
final selfDescribingJson = SelfDescribingJson(
schema: 'iglu:com.acme/event/jsonschema/1-0-0',
payload: <String, Object>{'message': 'hello world'},
);
final selfDescribing = SelfDescribing(selfDescribingJson);
_tracker.track(selfDescribing);
},
child: Text('Send Self Describing Event'),
),
SizedBox(height: 24.0),
ElevatedButton(
onPressed: () {
final structured = Structured(
category: 'shop',
action: 'add-to-basket',
label: 'Add To Basket',
property: 'pcs',
value: 2.00,
);
_tracker.track(structured);
},
child: Text('Send Structured Event'),
),
SizedBox(height: 24.0),
ElevatedButton(
onPressed: () {
final screenView = ScreenView(
name: 'home',
type: 'full',
transitionType: 'none',
previousName: '',
previousType: '',
);
_tracker.track(screenView);
},
child: Text('Send Screen View Event'),
),
SizedBox(height: 24.0),
ElevatedButton(
onPressed: () {
final pageView = PageViewEvent(
pageUrl: 'https://www.google.com/',
pageTitle: 'Google',
);
_tracker.track(pageView);
},
child: Text('Send Page View Event'),
),
SizedBox(height: 24.0),
ElevatedButton(
onPressed: () {
final timing = Timing(
category: 'category',
variable: 'variable',
timing: 1,
label: 'label',
);
_tracker.track(timing);
},
child: Text('Send Timing Event'),
),
SizedBox(height: 24.0),
ElevatedButton(
onPressed: () {
final item = EcommerceTransactionItem(
itemId: 'item_id_1',
sku: 'item_sku_1',
price: 1.00,
quantity: 1,
name: 'item_name',
category: 'item_category',
currency: 'currency',
);
final ecommerceTransaction = EcommerceTransaction(
orderId: '6a8078be',
totalValue: 300.00,
affiliation: 'my_affiliate',
taxValue: 30.00,
shipping: 10.00,
city: 'Boston',
state: 'Massachusetts',
country: 'USA',
currency: 'USD',
items: [item],
);
_tracker.track(ecommerceTransaction);
},
child: Text('Send Ecommerce Transaction Event'),
),
SizedBox(height: 24.0),
ElevatedButton(
onPressed: () {
final consentDocuments = [
ConsentDocument(
documentId: 'doc-id1',
documentVersion: '1',
documentName: 'doc-name1',
documentDescription: 'doc-description1',
),
];
final consentGranted = ConsentGranted(
documentId: '1234',
documentVersion: '5',
expiry: 'Monday, 19-Aug-05 15:52:01 UTC',
documentName: 'Consent document',
documentDescription: 'An example description',
consentDocuments: consentDocuments,
);
_tracker.track(consentGranted);
},
child: Text('Send Consent Granted Event'),
),
SizedBox(height: 24.0),
ElevatedButton(
onPressed: () {
final consentDocuments = [
ConsentDocument(
documentId: 'doc-id1',
documentVersion: '1',
documentName: 'doc-name1',
documentDescription: 'doc-description1',
),
];
final consentWithdrawn = ConsentWithdrawn(
all: false,
documentId: '1234',
documentVersion: '5',
documentName: 'Consent document',
documentDescription: 'An example description',
consentDocuments: consentDocuments,
);
_tracker.track(consentWithdrawn);
},
child: Text('Send Consent Withdrawn Event'),
),
SizedBox(height: 24.0),
ElevatedButton(
onPressed: () {
final notificationContent = NotificationContent(
title: 'You received a new message',
body: 'You received a new message',
badge: 1,
);
final pushNotification = PushNotification(
action: 'Message Received',
deliveryDate: DateTime.now().toString(),
trigger: 'message_received',
categoryIdentifier: '1',
threadIdentifier: '1',
notificationContent: notificationContent,
);
_tracker.track(pushNotification);
},
child: Text('Send Push Notification Event'),
),
],
),
),
),
),
);
}
}
更多关于Flutter数据分析跟踪插件snowplow_flutter_tracker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据分析跟踪插件snowplow_flutter_tracker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 snowplow_flutter_tracker
插件进行数据分析跟踪的代码示例。这个插件允许你在 Flutter 应用中集成 Snowplow,以便跟踪用户行为和其他相关数据。
首先,你需要在你的 Flutter 项目中添加 snowplow_flutter_tracker
依赖。打开你的 pubspec.yaml
文件,并添加以下依赖:
dependencies:
flutter:
sdk: flutter
snowplow_flutter_tracker: ^最新版本号 # 替换为实际的最新版本号
然后运行 flutter pub get
来获取依赖。
接下来,你需要初始化 Snowplow Tracker 并在你的应用中发送事件。以下是一个简单的示例:
1. 初始化 Snowplow Tracker
在你的应用的主文件(通常是 main.dart
)中,初始化 Snowplow Tracker:
import 'package:flutter/material.dart';
import 'package:snowplow_flutter_tracker/snowplow_flutter_tracker.dart';
void main() {
// 初始化 Snowplow Tracker
configureSnowplow();
runApp(MyApp());
}
void configureSnowplow() {
// 配置 Snowplow Tracker
SnowplowFlutterTracker.configure(
endpoint: 'https://<your-collector-endpoint>', // 替换为你的 Snowplow Collector 端点
namespace: 'com.example.myapp',
appId: 'MyApp',
platform: 'flutter',
enableFallback: true,
method: 'post',
flushBufferSize: 10,
flushInterval: 60,
);
// 启动 Snowplow Tracker
SnowplowFlutterTracker.start();
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
2. 发送事件
在你的应用中的其他地方,你可以发送各种事件。例如,在一个按钮点击事件中:
import 'package:flutter/material.dart';
import 'package:snowplow_flutter_tracker/snowplow_flutter_tracker.dart';
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Snowplow Flutter Tracker Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// 发送自定义事件
SnowplowFlutterTracker.trackSelfDescribingEvent(
schema: 'iglu:com.snowplowanalytics.snowplow/page_view/jsonschema/1-0-0',
data: {
'pageId': 'home_screen',
'pageTitle': 'Home Screen',
'referrer': 'unknown',
},
);
},
child: Text('Track Page View'),
),
),
);
}
}
3. 处理屏幕视图
如果你希望自动跟踪屏幕视图,你可以使用 ScreenViewTracker
。以下是如何集成 ScreenViewTracker
的示例:
import 'package:flutter/material.dart';
import 'package:snowplow_flutter_tracker/snowplow_flutter_tracker.dart';
void main() {
configureSnowplow();
runApp(MyApp());
}
void configureSnowplow() {
SnowplowFlutterTracker.configure(
endpoint: 'https://<your-collector-endpoint>', // 替换为你的 Snowplow Collector 端点
namespace: 'com.example.myapp',
appId: 'MyApp',
platform: 'flutter',
enableFallback: true,
method: 'post',
flushBufferSize: 10,
flushInterval: 60,
);
// 启动 Snowplow Tracker
SnowplowFlutterTracker.start();
// 初始化屏幕视图跟踪器
ScreenViewTracker.startTracking(
tracker: SnowplowFlutterTracker.instance,
onScreenView: (routeName) {
// 可选:自定义屏幕视图事件数据
Map<String, dynamic> context = {
'screen_name': routeName,
};
SnowplowFlutterTracker.trackSelfDescribingEvent(
schema: 'iglu:com.snowplowanalytics.snowplow/screen_view/jsonschema/1-0-0',
data: context,
);
},
);
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
onGenerateRoute: (settings) {
// 处理路由,返回带有路由名称的 Widget
switch (settings.name) {
case '/':
return MaterialPageRoute(builder: (context) => HomeScreen());
// 添加其他路由
default:
return MaterialPageRoute(builder: (context) => Scaffold(body: Center(child: Text('404'))));
}
},
home: HomeScreen(),
);
}
}
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Snowplow Flutter Tracker Example'),
),
body: Center(
child: Text('Home Screen'),
),
);
}
}
在这个示例中,ScreenViewTracker
会自动跟踪路由变化,并在每次路由变化时发送一个屏幕视图事件。
这些代码示例展示了如何在 Flutter 应用中集成和使用 snowplow_flutter_tracker
插件进行数据分析跟踪。根据你的需求,你可以进一步定制和扩展这些示例。