Flutter集成Tealium Braze插件tealium_braze的使用
Flutter集成Tealium Braze插件tealium_braze的使用
文档
完整的文档可以在以下链接中找到:
许可证
使用本软件受“LICENSE.txt”文件中包含的许可协议条款和条件约束。在下载或使用本存储库中的任何文件之前,请务必阅读许可协议。通过下载或使用这些文件,即表示您同意遵守并符合许可协议。
版权声明 © 2012-2024 Tealium Inc.
示例代码
以下是使用 tealium_braze
插件的完整示例代码:
示例代码:example/lib/main.dart
import 'dart:io';
import 'dart:math';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:tealium_braze/tealium_braze.dart';
import 'dart:developer' as developer;
import 'package:tealium/common.dart';
import 'package:tealium/tealium.dart';
import 'tealium_button.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
static String defaultUserId() {
if (Platform.isAndroid) {
return "TestFlutterAndroidUser";
} else if (Platform.isIOS) {
// iOS-specific code
return "TestFlutterIosUser";
}
return "";
}
final userIdValue = TextEditingController(text: defaultUserId());
final customEventValue = TextEditingController(text: "custom event");
final userAttributeValue = TextEditingController();
SubscriptionType? _subscriptionStatus;
[@override](/user/override)
void initState() {
super.initState();
initTealium();
}
// 初始化Tealium配置
Future<void> initTealium() async {
var config = TealiumConfig(
'tealiummobile', // Account名
'braze-tag', // Profile名
TealiumEnvironment.dev, // 环境(开发环境)
[Collectors.AppData], // 收集器
[Dispatchers.RemoteCommands], // 分发器
loglevel: LogLevel.DEV, // 日志级别
batchingEnabled: false, // 是否启用批量处理
consentExpiry: ConsentExpiry(5, TimeUnit.MINUTES), // 同意有效期
remoteCommands: [
RemoteCommand(TealiumBraze.commandName, path: "braze.json") // Braze远程命令
]);
Tealium.initialize(config).then((value) => {
developer.log('Tealium Initialized'), // 打印初始化日志
Tealium.setConsentStatus(ConsentStatus.consented), // 设置同意状态为已同意
Tealium.track(TealiumEvent("launch", {})) // 跟踪启动事件
});
}
// 构建UI列表
ListView _listView() {
return ListView(
scrollDirection: Axis.vertical,
padding: const EdgeInsets.all(8.0),
children: <Widget>[
const Padding(padding: EdgeInsets.all(3.5)),
// 事件部分
Text("Events",
style: Theme.of(context).textTheme.titleMedium,
textAlign: TextAlign.center),
LabelledTextBox("Event", customEventValue,
hint: "Enter a custom event"),
TealiumButton(
title: 'Track Custom Event', onPressed: _trackCustomEvent),
TealiumButton(title: 'Track Purchase', onPressed: _trackPurchase),
const TealiumDivider(),
// 用户部分
Text("User",
style: Theme.of(context).textTheme.titleMedium,
textAlign: TextAlign.center),
LabelledTextBox("Identity", userIdValue, hint: "Enter an Identity"),
TealiumButton(title: 'User Login', onPressed: _identifyUser),
LabelledTextBox("Attribute", userAttributeValue,
hint: "Enter a custom attribute"),
TealiumButton(
title: 'Set Custom Attribute', onPressed: _setCustomAttribute),
const TealiumDivider(),
// 订阅部分
Text("Email/Push Subscription",
style: Theme.of(context).textTheme.titleMedium,
textAlign: TextAlign.center),
RadioListTile(
title: Text(SubscriptionType.optedIn.name),
value: SubscriptionType.optedIn,
groupValue: _subscriptionStatus,
onChanged: _updateSubscription),
RadioListTile(
title: Text(SubscriptionType.unsubscribed.name),
value: SubscriptionType.unsubscribed,
groupValue: _subscriptionStatus,
onChanged: _updateSubscription),
RadioListTile(
title: Text(SubscriptionType.subscribed.name),
value: SubscriptionType.subscribed,
groupValue: _subscriptionStatus,
onChanged: _updateSubscription)
],
);
}
// 用户登录事件
void _identifyUser() {
var userId = userIdValue.text;
if (userId == "") return;
Tealium.track(TealiumView("user_login", {"customer_id": userId}));
}
// 跟踪自定义事件
void _trackCustomEvent() {
var customEvent = customEventValue.text;
if (customEvent == "") return;
Tealium.track(TealiumView("log_custom_event", {"event_name": customEvent}));
}
// 跟踪购买事件
void _trackPurchase() {
Tealium.track(TealiumView("purchase", {
"product_id": ["SKU-123", "SKU-456"],
"product_name": ["Product 123", "Product 456"],
"product_category": ["clothes", "shoes"],
"product_quantity": [1, 2],
"product_price": [10.0, 5.0],
"currency_code": "USD",
"order_total": 20.0,
"order_id": "ORD-${_generateOrderId()}",
}));
}
// 设置自定义属性
void _setCustomAttribute() {
var userAttribute = userAttributeValue.text;
if (userAttribute == "") return;
Tealium.track(TealiumView("custom_attribute", {"pet": userAttribute}));
}
// 更新订阅状态
void _updateSubscription(SubscriptionType? subscriptionType) {
setState(() {
_subscriptionStatus = subscriptionType;
});
if (subscriptionType == null) return;
Tealium.track(TealiumEvent("setengagement", {
"email_subscription": subscriptionType.name,
"push_subscription": subscriptionType.name
}));
}
// 生成订单ID
String _generateOrderId() {
var rand = Random();
return rand.nextInt(99999999).toString();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: _listView(),
),
);
}
}
// 定义订阅类型枚举
enum SubscriptionType { optedIn, unsubscribed, subscribed }
// 自定义分割线组件
class TealiumDivider extends StatelessWidget {
final EdgeInsetsGeometry padding;
const TealiumDivider({super.key, this.padding = const EdgeInsets.all(8.0)});
[@override](/user/override)
Widget build(BuildContext context) {
return Padding(
padding: padding,
child: const Divider(
height: 20,
thickness: 2,
indent: 10,
endIndent: 10,
color: Colors.blueGrey,
));
}
}
// 带标签的文本框组件
class LabelledTextBox extends StatelessWidget {
final String label;
final String hint;
final TextEditingController controller;
const LabelledTextBox(this.label, this.controller,
{super.key, this.hint = ""});
[@override](/user/override)
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisSize: MainAxisSize.min,
children: [
Text('$label:'),
const Padding(padding: EdgeInsets.all(3)),
Expanded(
child: TextField(
controller: controller,
autocorrect: true,
decoration: InputDecoration(hintText: hint),
))
],
);
}
}
更多关于Flutter集成Tealium Braze插件tealium_braze的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter集成Tealium Braze插件tealium_braze的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 应用中集成 Tealium 和 Braze 插件 tealium_braze
可以帮助你将用户行为数据从 Tealium 传递到 Braze,从而实现更精细的用户分析和营销自动化。以下是集成 tealium_braze
插件的步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 tealium
和 tealium_braze
插件的依赖。
dependencies:
flutter:
sdk: flutter
tealium: ^2.0.0 # 请使用最新版本
tealium_braze: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 初始化 Tealium
在 main.dart
文件中初始化 Tealium。你需要在应用启动时配置 Tealium,并确保 tealium_braze
插件已注册。
import 'package:flutter/material.dart';
import 'package:tealium/tealium.dart';
import 'package:tealium_braze/tealium_braze.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 配置 Tealium
TealiumConfig config = TealiumConfig(
account: 'your_account',
profile: 'your_profile',
environment: Environment.prod,
dataSource: 'your_data_source',
collectors: [Collectors.lifecycle, Collectors.attribution],
dispatchers: [Dispatchers.tagManagement],
plugins: [TealiumBraze()], // 注册 Braze 插件
);
await Tealium.initialize(config);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Tealium Braze Example',
home: MyHomePage(),
);
}
}
3. 使用 Tealium 跟踪事件
你可以在应用中使用 Tealium 来跟踪用户事件,并将这些事件传递给 Braze。
import 'package:flutter/material.dart';
import 'package:tealium/tealium.dart';
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Tealium Braze Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () {
// 跟踪一个自定义事件
Tealium.trackEvent('button_click', data: {'button_name': 'example_button'});
},
child: Text('Track Event'),
),
ElevatedButton(
onPressed: () {
// 跟踪用户属性
Tealium.trackView('home_screen', data: {'user_id': '12345'});
},
child: Text('Track View'),
),
],
),
),
);
}
}