Flutter集成Tealium Braze插件tealium_braze的使用

Flutter集成Tealium Braze插件tealium_braze的使用

文档

完整的文档可以在以下链接中找到:

Tealium for Flutter

许可证

使用本软件受“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

1 回复

更多关于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 文件中添加 tealiumtealium_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'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部