Vai alla console

使用 A/B 测试来创建 Firebase 远程配置实验

当您更新应用并通过 Firebase 远程配置将其推送到一个具有活跃用户群的应用时,您希望确认这些更新能更好地服务用户。您可能对以下事项不太确定:

  • 实现某项功能以优化用户体验的最佳方式。 很多时候,直到应用在应用商店的评分下降了,开发者才知道他们的用户不喜欢某个新功能或更新后的用户体验。A/B 测试可以帮助衡量您的用户是喜欢功能方面的新变化,还是更希望应用保持原样。另外,将大多数用户保留在对照组中可以确保用户群的大部分能照常使用您的应用,不会在实验结束前经历任何应用行为或外观方面的变化。
  • 为某个业务目标优化用户体验的最佳方式。 有时候,您想要实施产品更改以尽可能提高收入或留存率等指标。通过 A/B 测试,您可以设定您的业务目标,然后 Firebase 会进行统计分析,以确定在所选的目标方面,某个变体的效果是否优于对照组。

如需利用对照组对功能变体进行 A/B 测试,请执行以下操作:

  1. 创建实验。
  2. 在测试设备上验证您的实验。
  3. 管理实验。

创建实验

远程配置实验可用于评估一个或多个远程配置参数的多个变体。

  1. 登录 Firebase,更新数据共享设置,并确保已启用数据共享。如果未启用数据共享,您的实验将无法访问分析数据。
  2. Firebase 控制台导航栏上,展开发展,然后点击 A/B Testing(A/B 测试)。
  3. 点击创建实验,然后在系统提示您选择要试验的服务时选择“远程配置”。
  4. 输入实验的名称说明(可选),然后点击下一步
  5. 填写定位字段,首先选择要开展实验的应用。您还可以选择下列一个或多个选项来定位一部分用户,让这些用户参与您的实验:

    • 版本:应用的一个或多个版本
    • 用户受众群体:用于选择哪些用户可参与实验的 Analytics 受众群体
    • 用户属性:用于选择哪些用户可参与实验的一个或多个 Analytics 用户属性
    • 预测:机器学习系统预测将进行特定行为的用户组
    • 国家/地区:用于选择哪些用户可参与实验的一个或多个国家或地区
    • 设备语言:用于选择可以参与实验的用户的一种或多种语言和语言区域
  6. 设置目标用户百分比:输入应用的用户群百分比,以指定与您在目标用户下设置的条件匹配的用户中,您要将其中多少比例的用户平均分配到实验中的对照组和一个或多个变体。此值可以为介于 0.01% 与 100% 之间的任何百分比。系统会为每个实验(包括复制的实验)随机分配用户。

  7. (可选)设置一个激活事件以确保您的实验中只会纳入首先触发了某个 Analytics 事件的用户,然后点击下一步

  8. 对于实验的目标,请选择要跟踪的主要指标,然后从下拉列表中添加所需的其他指标。这些指标包括内置目标(参与度、购买量、收入、留存时间等)、Analytics 转化事件和其他 Analytics 事件。完成后,点击下一步

  9. 变体部分中,您将为该实验选择一个对照组和至少一个变体。使用选择或新建列表添加一个或多个参数进行试验。您还可以创建一个之前未在 Firebase 控制台中使用过的参数,但该参数必须存在于您的应用中才能发挥作用。您可以重复此步骤为您的实验添加多个参数。

    对于每个变体,您可以选择添加变体级定位条件,这些条件可从实验级可用的定位选项列表中选择:版本用户受众群体用户属性预测国家/地区设备语言

  10. (可选)要在实验中添加多个变体,请点击添加其他变体

  11. 更改特定变体的一个或多个参数。对于未参与实验的用户,任何未更改的参数的值都是相同的。

  12. 点击查看以保存实验。

在测试设备上验证您的实验

安装的每个 Firebase 应用都会有一个关联的实例 ID 令牌(即注册令牌)。您可以使用此令牌在安装了您的应用的测试设备上测试特定实验变体。如需在测试设备上验证您的实验,请执行以下操作:

  1. 按如下方式获取实例 ID 令牌:

    Swift

    InstanceID.instanceID().instanceID { (result, error) in
      if let error = error {
        print("Error fetching remote instance ID: \(error)")
      } else if let result = result {
        print("Remote instance ID token: \(result.token)")
        self.instanceIDTokenMessage.text  = "Remote InstanceID token: \(result.token)"
      }
    }

    Objective-C

    [[FIRInstanceID instanceID] instanceIDWithHandler:^(FIRInstanceIDResult * _Nullable result,
                                                        NSError * _Nullable error) {
      if (error != nil) {
        NSLog(@"Error fetching remote instance ID: %@", error);
      } else {
        NSLog(@"Remote instance ID token: %@", result.token);
        NSString* message =
          [NSString stringWithFormat:@"Remote InstanceID token: %@", result.token];
        self.instanceIDTokenMessage.text = message;
      }
    }];

    Java

    FirebaseInstanceId.getInstance().getInstanceId()
            .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
                @Override
                public void onComplete(@NonNull Task<InstanceIdResult> task) {
                    Log.d("IID_TOKEN", task.getResult().getToken());
                }
            });

    Kotlin

    FirebaseInstanceId.getInstance().instanceId
            .addOnSuccessListener { result ->
                Log.d("IID_TOKEN", result.token)
            }

    C++

    firebase::InitResult init_result;
    auto* instance_id_object = firebase::instance_id::InstanceId::GetInstanceId(
        firebase::App::GetInstance(), &init_result);
    instance_id_object->GetToken().OnCompletion(
        [](const firebase::Future<std::string>& future) {
          if (future.status() == kFutureStatusComplete &&
              future.error() == firebase::instance_id::kErrorNone) {
            printf("Instance ID Token %s\n", future.result()->c_str());
          }
        });
    

    Unity

    Firebase.InstanceId.FirebaseInstanceId.DefaultInstance.GetTokenAsync().ContinueWith(
      task => {
        if (!(task.IsCanceled || task.IsFaulted) && task.IsCompleted) {
          UnityEngine.Debug.Log(System.String.Format("Instance ID Token {0}", task.Result));
        }
      });
    
  2. Firebase 控制台导航栏上,点击 Remote Config(远程配置)或 Notifications(通知),然后点击 A/B testing(A/B 测试)。
  3. 依次点击草稿和实验标题。
  4. 点击管理测试设备,然后输入测试设备的实例 ID 令牌,并选择要发送到该测试设备的实验变体。
  5. 运行应用,并确认测试设备正在接收所选的变体。

如需详细了解实例 ID 令牌,请参阅 FIRInstanceID (iOS) 或 FirebaseInstanceId (Android)。

管理实验

无论您是使用远程配置还是通知编辑器来创建实验,接下来您都可以验证并启动实验,在实验运行时监控实验,并增加参与正在运行的实验的用户数量。

实验完成后,您可以记录胜出变体的设置,然后将这些设置推送给所有用户。或者,您可以运行另一个实验。

启动实验

  1. Firebase 控制台导航栏上,展开发展,然后点击 A/B Testing(A/B 测试)。
  2. 依次点击草稿和实验标题。
  3. 如需验证您的应用存在可以纳入到实验中的用户,请在定位和分布部分中检查有没有大于 0% 的数字(例如,1% 的用户符合条件)。
  4. 如需更改实验,请点击修改
  5. 如需启动实验,请点击启动实验。您最多可以同时为每个项目运行 24 个实验。

监控实验

在实验运行了一段时间后,您可以查看实验进度,并了解到目前为止,在参与实验的用户中效果如何。

  1. Firebase 控制台导航栏上,点击发展,然后点击 A/B Testing(A/B 测试)。
  2. 依次点击正在运行和实验标题。在此页面上,您可以查看有关正在运行的实验的各种统计信息,包括目标指标和其他指标。对于每个指标,您可以看到以下信息:

    • 提高幅度:根据给定变体与基准组合(即对照组)的比较结果来衡量某个指标的提高幅度。计算方法是将相应变体的值范围与基准组合的值范围进行比较。
    • 胜过基准组合的概率:给定变体胜过基准组合(依据所选指标)的估算概率。
    • 成为最佳变体的概率:给定变体胜过其他变体(依据所选指标)的估算概率。
    • 用户平均值:预测(以实验结果为依据)指标值将逐渐归入的范围。
    • 总值:对照组或变体观测到的累积值。该值用于衡量每个实验变体的表现,以及计算提高幅度值范围胜过基准组合的概率成为最佳变体的概率。根据所衡量的指标,此列可能会标记为“每位用户的使用时长”、“留存率”或“转化率”。
  3. 如需增加参与实验的用户数量,请点击提高比例,然后选择增加的百分比以将更多符合条件的用户添加到实验中。

  4. 实验运行一段时间(至少 24 小时)后,本页上的数据会指示哪个变体(如果有)是“领先变体”。一些衡量结果会附带条形图来直观地呈现数据。

向所有用户发布实验

在实验运行了较长的一段时间,足以让您依据目标指标找到“领先变体”(即胜出变体)后,您就可以向所有用户发布该实验了。您可以选择一个要在远程配置中面向所有用户发布的值。即使实验尚未确定明确的胜出者,您仍然可以选择向所有用户发布某个变体。

  1. Firebase 控制台导航栏上,点击发展,然后点击 A/B Testing(A/B 测试)。
  2. 点击已完成正在运行,然后点击您要向所有用户发布的实验,接着依次点击上下文菜单 (more_vert)发布变体
  3. 通过执行以下操作之一,向所有用户发布您的实验:

    • 对于使用通知编辑器的实验,请使用发布消息对话框向未参与该实验的其余目标用户发送消息。
    • 对于远程配置实验,请使用对话框确定要为所有用户更改的远程配置参数值。

扩大实验规模

如果发现某个实验涵盖的用户不够多,无法让 A/B 测试确定领先变体,您可以扩大实验规模以提高所覆盖的应用用户群比例。

  1. Firebase 控制台导航栏上,点击发展,然后点击 A/B Testing(A/B 测试)。
  2. 点击正在运行,将鼠标悬停在实验上,点击上下文菜单 (more_vert),然后点击提高比例
  3. 控制台将显示一个对话框,您可以使用其中的选项,提高参与当前正在运行的实验的用户比例。输入一个大于当前百分比的数字,然后点击发送。系统就会将实验推送给您所指定的用户群中该百分比的用户。

复制或停止实验

  1. Firebase 控制台导航栏上,点击发展,然后点击 A/B Testing(A/B 测试)。
  2. 点击已完成正在运行,将鼠标悬停在实验上,点击上下文菜单 (more_vert),然后点击复制停止

用户定位

您可以使用以下条件来定位用户,以将其纳入到实验中。

定位条件 运算符    备注
版本 包含、
不包含、
完全匹配、
包含正则表达式
输入要纳入到实验中的一个或多个应用版本的值。

当使用包含不包含完全匹配运算符中的任意运算符时,您可以提供一个以英文逗号分隔的值列表。

当使用包含正则表达式运算符时,您可以创建 RE2 格式的正则表达式。您的正则表达式可以与目标版本字符串的全部或部分文本匹配。您还可以使用 ^$ 定位点与目标字符串的开头部分、结尾部分或全部文本匹配。

用户受众群体 包含全部、
包含至少一个、
包含部分、
不包含至少一个
选择一个或多个 Analytics 受众群体,以定位可以参与实验的用户。  
用户属性 对于文本:
包含、
不包含、
完全匹配、
包含正则表达式

对于数字:
<、≤、=、≥、>
Analytics 用户属性用于选择可以参与实验的用户,并提供一系列用于选择用户属性值的选项。

在客户端上,您只能为用户属性设置字符串值。对于使用数值运算符的条件,远程配置服务会将相应用户属性的值转换为整数/浮点数。
当使用包含正则表达式运算符时,您可以创建 RE2 格式的正则表达式。您的正则表达式可以与目标版本字符串的全部或部分文本匹配。您还可以使用 ^$ 定位点与目标字符串的开头部分、结尾部分或全部文本匹配。
预测 不适用 由 Firebase 预测功能定义的目标用户群,例如可能会停止使用您应用的用户,或者可能进行应用内购买的用户。您可以选择 Firebase 预测工具定义的其中一个值。如果某个选项不可用,您可能需要在 Firebase 控制台中转至“Predictions”(预测)部分来选择启用 Firebase 预测。  
设备所在国家/地区 不适用 用于选择可以参与实验的用户的一个或多个国家或地区。  
设备语言 不适用 用于选择可以参与实验的用户的一种或多种语言和语言区域。 此定位条件仅适用于远程配置。

变体级定位

使用远程配置进行 A/B 测试时,您还可以使用面向高级用例的额外功能:变体级定位。使用此功能,您可以将采用某种配置的应用限定到某种变体涵盖的部分用户范围内。这样就可以测试不同的定位方案如何影响关键指标。为相应变体定义的配置只会用于同时满足实验级定位条件和变体级定位条件的用户,而变体中的其余用户将收到默认配置。请注意,无论是否符合变体级定位条件,变体中的所有用户都会纳入指标计算范畴,以免发生选择偏差。

例如,此获利策略实验利用 Firebase 预测,在变体级别定位用户。如示例中所示,在创建实验的过程中配置了变体级定位条件。

A/B 测试指标

在创建实验时,您可以选择用于比较实验变体的指标,还可以选择要跟踪的其他指标,以帮助您更好地了解每个实验变体并检测任何显著的副作用(例如应用崩溃)。下方各表提供了有关如何计算目标指标和其他指标的详细信息。

目标指标

指标 说明
每日互动用户数 每天在前台运行您的应用的时间足以触发 user_engagement Analytics 事件的用户数。
留存人数(1 天) 每天访问您的应用的用户数。
留存人数(2-3 天) 间隔 2-3 天后访问您的应用的用户数。
留存人数(4-7 天) 间隔 4-7 天后访问您的应用的用户数。
留存人数(8-14 天) 间隔 8-14 天后访问您的应用的用户数。
留存人数(15 天以上) 在距离上次使用您的应用 15 天(或更长时间)后访问应用的用户数。
打开通知 跟踪用户是否打开了通知编辑器所发出的通知。
购买交易的收入 所有 ecommerce_purchasein_app_purchase 事件的总价值。
估算的 AdMob 收入 估算的来自 AdMob 的收入。
估算的总收入 购买交易收入和 AdMob 估算收入的总价值。
first_open 用户在安装或重新安装应用后首次打开该应用时触发的 Analytics 事件。用作转化渠道的一部分。
notification_open 当用户打开通知编辑器所发出的通知时触发的 Analytics 事件。用作转化渠道的一部分。

其他指标

指标 说明
未受崩溃事件影响的用户数 在实验期间,未在您应用中遇到 Firebase Crash Reporting SDK 所检测到的错误的用户所占的百分比。要了解详情,请参阅“未受崩溃事件影响的用户数”指标
notification_dismiss 当通知编辑器所发出的通知被关闭时触发的 Analytics 事件(仅适用于 Android)。
notification_receive 当应用在后台运行并收到通知编辑器所发出的通知时触发的 Analytics 事件(仅适用于 Android)。
os_update 一个用于跟踪设备操作系统何时更新为新版本的 Analytics 事件。要了解详情,请参阅自动收集的事件
screen_view 一个用于跟踪您应用中的屏幕浏览量的 Analytics 事件。要了解详情,请参阅跟踪屏幕浏览量
session_start 一个用于统计您应用中的用户会话数的 Analytics 事件。要了解详情,请参阅自动收集的事件
user_engagement 一个当您的应用在前台运行时周期性触发的 Analytics 事件。要了解详情,请参阅自动收集的事件

向 BigQuery 导出数据

您可以在 BigQuery 中访问与您的 A/B 测试相关的所有分析数据。借助 BigQuery,您可以使用 BigQuery SQL 来分析数据,将数据导出至其他云服务商,或将该数据用于自定义机器学习模型。如需了解详情,请参阅将 BigQuery 关联到 Firebase

如需开始使用,请确保您的 Firebase 项目已关联至 BigQuery。从左侧导航栏中依次选择设置 > 项目设置,然后依次选择集成 > BigQuery > 关联。此页面显示了为项目中的所有应用导出 BiqQuery 分析数据的选项。

如需在实验环境中查询分析数据,您可以打开实验结果页面,然后选择在 BigQuery 中查看。这将打开 BigQuery 控制台的查询编辑器,其中包含预先加载的实验数据查询示例,以供您参考。请注意,由于 BigQuery 中的 Firebase 数据每天只更新一次,因此实验页面中的数据可能会比 BigQuery 控制台中的数据更新。