如何在Flutter中集成Firebase A/B Testing

概述

1,在Firebase后台可以同时创建多个实验,每个实验下至少包含两个组:1个必须的对照组 + 至少1个实验组,例如:

组不能脱离实验单独存在,不同实验之间相互独立,同一设备可以同时参与多个不同实验,但在同一个实验里只会被分配到其中一个组(互斥)。

2,组和 Remote Config 的联动?

同一个实验下的每一个组分别对应一套 RC 的参数配置集合,这些集合里拥有相同的 Key,但填入了不同的 Value,示例如下:

如何判断用户在不在实验内?

1,不在实验内的用户,默认会拿到 RC 中配置的默认值。

2,是否进入实验、分到哪个组,是 Firebase 服务端在下发 Remote Config 配置时自动判定,客户端不需要自己写逻辑去判断分流。整个分流决策发生在 Firebase 云端,不是客户端本地抽签。

客户端如何判断当前用户在不在实验?(不在实验的就归属对照组)

1,绝大多数场景下客户端不需要去判断当前设备是否在实验中,客户端只需直接读取 RC 中配置的某个参数,服务端会根据是否在实验中自动返回合适的值(在实验中的实验分组值 / 不在实验中的RC默认值)

2,如果非要明确知道在不在实验中,也可以通过调用API来进行判断。


后台 A/B Testing 配合Firebase Analytics 创建的整体流程

前置条件:在Firebase后台已经创建 Firebase 项目,并添加了 App(Android / iOS / Flutter / Unity 等)。并启用 Firebase Analytics。

1,提前创建 Remote Config (创建实验时为组绑定参数时会用到)

你需要提前有一个 Remote Config 参数,比如:

参数名:homepage_display_mode

设置默认值:old_home (提示:这个默认值就是之后不在实验内用户的取值

示例如下图:

2,创建实验

在 Firebase 控制台打开你的项目,左侧菜单进入DevOps和互动 → A/B Testing,点击创建实验,选择Remote Config,如下图:

设置实验变量和对照组:

1,填写实验名称和说明,如下:

2,选择定位,如下图:

提示: 上面为实验绑定事件之后 Firebase 会自动把实验信息与 Analytics 事件关联。你不需要在 Analytics 事件里手动传实验组 ID,SDK 会自动处理。

3,设置 主要指标(必填) 和 其他指标(可选),比如增加留存或者增加收入(将来判断同一实验下多个组哪个组获胜的判定标准):

4,设置变体(创建实验组,所有的组都是变体包括对照组),如下图:

也就是说:对照组用户 仍然看到旧首页(默认值是old_home),实验组用户看到新首页(设置的新值new_home)。

3,启动实验

点击 底部审核 按钮启动实验。

实验启动后,Firebase 会开始给目标用户下发 Remote Config 参数,并开始收集 Analytics 事件。

4,查看实验结果

实验运行一段时间后,回到 Firebase 控制台 A/B Testing 页面,点击你的实验,会看到:

1,每个组(Control / Variant A)的用户数

2,转化事件数量

3,转化率

4,相比对照组的提升幅度

5,置信概率 / 可能性

例如:

组别 用户数 转化事件 转化率 提升

对照组 5000 300 6% -

变体A 5000 450 9% +50%

同时会显示一个概率,比如:

Variant A 有 96% 的概率优于 Control。

这个概率越高,代表结果越可靠。通常建议达到 95% 以上再决定发布。

5,发布获胜方案或结束实验

当实验结论明确后:

1,如果变体 A 获胜:

1.1,点击 结束实验并发布

1.2,选择获胜的变体 new_home

1.3,Firebase 会把 homepage_display_mode 的 Remote Config 默认值更新为 new_home。

之后,所有用户 都会拿到新首页,而不仅仅是实验用户。

2,如果对照组获胜:

2.1,点击 结束实验

2.2,不发布变体

2.3,所有用户继续使用默认值 old_home

注意事项

1.不要改动多个变量:建议一个实验只改变一个变量,否则无法确定是哪个变化带来的收益。

  1. 实验前先确认事件已上报 A/B Testing 的目标事件必须已经在 Firebase Analytics 中出现过,否则无法选择。

  2. 避免过早结束实验 样本量太小会导致结果不可靠。等控制台给出足够置信度再发布。

  3. 对照组和实验组流量分配要合理 建议至少 30% 的用户进入实验,否则分析周期会很长。

  4. 使用 Analytics 受众做精细化投放 如果你想只针对"已注册用户"或"前 7 天内打开过 App 的用户"测试,可以在 Analytics 里创建 Audience,然后在实验 Targeting 中选择该 Audience。


客户端集成(Flutter举例)

1,添加插件依赖

bash 复制代码
dependencies:
  firebase_core: latest_version
  firebase_remote_config: latest_version

2,初始化Firebase应用:

bash 复制代码
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

3,配置Remote Config

在Firebase控制台中,配置Remote Config参数。例如,你可以创建两个参数button_colorbutton_text,分别表示按钮颜色和文本。

4,在应用中获取Remote Config配置的字段值使用

在Flutter应用中,获取Remote Config的参数值,并根据这些值来渲染不同的UI:

bash 复制代码
import 'package:firebase_remote_config/firebase_remote_config.dart';

class MyApp extends StatelessWidget {
  final RemoteConfig remoteConfig = RemoteConfig.instance;

  Future<void> _fetchRemoteConfig() async {
    await remoteConfig.fetchAndActivate();
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: _fetchRemoteConfig(),
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.done) {
          String buttonColor = remoteConfig.getString('button_color');
          String buttonText = remoteConfig.getString('button_text');

          return MaterialApp(
            home: Scaffold(
              appBar: AppBar(title: Text('A/B Test')),
              body: Center(
                child: ElevatedButton(
                  style: ElevatedButton.styleFrom(
                    primary: buttonColor == 'red' ? Colors.red : Colors.blue,
                  ),
                  onPressed: () {},
                  child: Text(buttonText),
                ),
              ),
            ),
          );
        } else {
          return CircularProgressIndicator();
        }
      },
    );
  }
}

在这个示例中,我们使用了FirebaseABTesting.getExperimentVariables()方法来获取实验变量的值。你可以根据需要替换your_experiment_variable为你的实验变量名称。

5,分析测试结果

通过Firebase Analytics或其他分析工具,收集用户行为数据,分析哪个版本的UI或功能表现更好。

相关推荐
xcyxiner19 小时前
flutter wsl2安装记录(使用宿主机虚拟机)
前端·flutter
Kevin Coding21 小时前
JsonConvert:适用于 Android、鸿蒙与 Flutter 的 JSON 转 Model 插件
android·flutter·harmonyos
iFlyCai1 天前
Flutter原理深度解析:从架构到渲染的全面剖析(二)
flutter·flutter 三棵树
里欧跑得慢2 天前
CSS 模块化架构的演进:BEM、CSS Modules 到 CSS-in-JS 的反思
前端·css·flutter·web·css-in-js
iFlyCai2 天前
深入理解Flutter:StatefulWidget生命周期全解析(一)
flutter·dart·状态管理·statefulwidget
xiangxiongfly9152 天前
Flutter video_player总结
flutter·video_player·chewie
见山是山-见水是水3 天前
鸿蒙版 Flutter Video 视频播放组件:播放控制、全屏切换与倍速播放
flutter·音视频·harmonyos
六年码农3 天前
2026最新开源 屏译ScreenTranslator 0.4.4 开源 全屏实时翻译教程
运维·人工智能·flutter·开源
WeiAreYoung3 天前
Flutter+iOS 实现 Live Activity
flutter·ios
恋猫de小郭3 天前
超好用 R8 Configuration Analyzer, 优化你的 App 大小和内存
android·前端·flutter