如何在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或功能表现更好。

相关推荐
末代iOS程序员华仔3 小时前
OPC + Flutter + Swift:跨平台应用上架与专业知识点获客实战指南
开发语言·flutter·swift
FungLeo3 小时前
Flutter/Android Release 包连不上网?AndroidManifest INTERNET 权限排查实录
android·flutter
GitLqr21 小时前
深度拆解 Dart 事件循环:从面试题看清 Microtask 与 Event Queue 的执行顺序
flutter·面试·dart
吾儿良辰1 天前
Flutter 迎来重大变革:Material 设计系统拆分,迈向更开放的 UI 框架
javascript·flutter·ui
看昭奚恤哭1 天前
Flutter 布局核心思想
开发语言·javascript·flutter
末代iOS程序员华仔1 天前
iOS上架海外工具类应用合规指南:避免封号与下架风险
flutter·ios·swift
末代iOS程序员华仔1 天前
Flutter 开发 iOS App 上架全流程与常见问题分析
flutter·ios
末代iOS程序员华仔1 天前
Flutter开发iOS海外工具类应用上架合规指南与风险规避
flutter·ios
蜡台2 天前
Flutter 环境搭建 Dart配置
flutter·dart