欢迎参加我们将于 2022 年 10 月 18 日举办的 Firebase 峰会(线上线下同时进行),了解 Firebase 如何帮助您加快应用开发速度、满怀信心地发布应用并在之后需要时轻松地扩大应用规模。立即报名

使用 A/B Testing 创建 Firebase Remote Config 实验

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

如果您使用 Firebase Remote Config 为具有活跃用户群的应用部署设置,需要确保这些配置正确无误。您可以使用 A/B Testing 实验来确定以下内容:

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

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

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

创建实验

Remote Config 实验可用于评估一个或多个 Remote Config 参数的多个变体。

  1. 登录 Firebase 控制台,验证是否已在您的项目中启用 Google Analytics(分析),以便实验可以访问 Analytics 数据。

    如果您在创建项目时没有启用 Google Analytics(分析),可以在集成标签页中启用。使用 Firebase 控制台中的 > 项目设置即可访问此标签页。

  2. Firebase 控制台导航栏的吸引部分,点击 A/B Testing

  3. 点击创建实验,然后在系统提示您选择要试验的服务时选择 Remote Config

  4. 输入实验的名称说明(可选),然后点击下一步

  5. 填写定位字段,首先选择要开展实验的应用。您还可以定位一部分用户参与实验,方法是点击,然后从以下列表中选择所需选项:

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

  7. (可选)设置激活事件,确保您的实验只统计首先触发了某些 Analytics 事件的用户的数据。请注意,所有与您的定位参数匹配的用户都将收到 Remote Config 实验值,但只有触发了激活事件的用户才会包含在实验结果中。

    为保证实验有效,请确保您选择的事件发生于应用激活提取的配置值之后。此外,不能使用以下事件,因为它们始终发生于激活提取的值之前:

    • app_install
    • app_remove
    • app_update
    • dynamic_link_first_open
    • first_open
  8. 对于实验的目标,请选择要跟踪的主要指标,然后从下拉列表中添加所需的其他指标。这包括内置目标(购买量、收入、留存率、未遇到崩溃问题的用户等),Analytics 转化事件和其他 Analytics 事件。完成后,点击下一步

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

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

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

  12. 展开变体权重,查看或更改实验的变体权重。默认情况下,系统会为每个变体分配相等的权重。请注意,权重不均匀可能会增加数据收集时间,并且实验开始后便无法更改权重

  13. 点击查看,保存实验。

每个项目最多可以有 300 个实验,最多包括 24 个正在运行的实验,其余为实验草稿或已完成的实验。

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

对于每个 Firebase 安装,您都可以检索关联的安装身份验证令牌。您可以使用此令牌在安装了您的应用的测试设备上测试特定实验变体。如需在测试设备上验证您的实验,请执行以下操作:

  1. 按如下方式获取安装身份验证令牌:

    Swift

    Installations.installations().authTokenForcingRefresh(true, completion: { (result, error) in
      if let error = error {
        print("Error fetching token: \(error)")
        return
      }
      guard let result = result else { return }
      print("Installation auth token: \(result.authToken)")
    })
    

    Objective-C

    [[FIRInstallations installations] authTokenForcingRefresh:true
                                                   completion:^(FIRInstallationsAuthTokenResult *result, NSError *error) {
      if (error != nil) {
        NSLog(@"Error fetching Installation token %@", error);
        return;
      }
      NSLog(@"Installation auth token: %@", [result authToken]);
    }];
    

    Java

    FirebaseInstallations.getInstance().getToken(/* forceRefresh */true)
            .addOnCompleteListener(new OnCompleteListener<InstallationTokenResult>() {
        @Override
        public void onComplete(@NonNull Task<InstallationTokenResult> task) {
            if (task.isSuccessful() && task.getResult() != null) {
                Log.d("Installations", "Installation auth token: " + task.getResult().getToken());
            } else {
                Log.e("Installations", "Unable to get Installation auth token");
            }
        }
    });

    Kotlin+KTX

    FirebaseInstallations.getInstance().getToken(/* forceRefresh */ true)
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Log.d("Installations", "Installation auth token: " + task.result?.token)
            } else {
                Log.e("Installations", "Unable to get Installation auth token")
            }
        }

    C++

    firebase::InitResult init_result;
    auto* installations_object = firebase::installations::Installations::GetInstance(
        firebase::App::GetInstance(), &init_result);
    installations_object->GetToken().OnCompletion(
        [](const firebase::Future& future) {
          if (future.status() == kFutureStatusComplete &&
              future.error() == firebase::installations::kErrorNone) {
            printf("Installations Auth Token %s\n", future.result()->c_str());
          }
        });
    

    Unity

    Firebase.Installations.FirebaseInstallations.DefaultInstance.GetTokenAsync().ContinueWith(
      task => {
        if (!(task.IsCanceled || task.IsFaulted) && task.IsCompleted) {
          UnityEngine.Debug.Log(System.String.Format("Installations token {0}", task.Result));
        }
      });
    
  2. Firebase 控制台导航栏上,点击 A/B Testing
  3. 点击草稿(对于 Remote Config 实验点击正在运行),将光标悬停在实验上,点击上下文菜单 (),然后点击管理测试设备
  4. 输入测试设备的安装身份验证令牌,并选择要发送到该测试设备的实验变体。
  5. 运行应用,并确认测试设备正在接收所选变体。

如需详细了解 Firebase 安装,请参阅管理 Firebase 安装

管理实验

无论您是使用 Remote Config、Notifications Composer 还是 Firebase In-App Messaging 来创建实验,接下来您都可以验证并启动实验,在实验运行时监控实验,并增加参与正在运行的实验的用户数量。

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

启动实验

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

监控实验

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

  1. Firebase 控制台导航栏的吸引部分,点击 A/B Testing
  2. 依次点击正在运行和实验标题。在此页面上,您可以查看有关正在运行的实验的各种实测和建模统计信息,包括以下内容:

    • 与基准的偏差百分比:根据给定变体与基准的比较结果来衡量某个指标的提高幅度。计算方法是将相应变体的值范围与基准组合的值范围进行比较。
    • 胜过基准组合的概率:对于所选指标,给定变体胜过基准组合的估算概率。
    • 每用户 observed_metric:根据实验结果,预测指标值将逐渐归入的范围。
    • observed_metric:观测到的基准或变体的累积值。该值用于衡量每个实验变体的表现,以及计算提高幅度值范围胜过基准组合的概率成为最佳变体的概率。根据要衡量的指标,此列可能会标记为“每位用户的使用时长”“每位用户的收入”“留存率”或“转化率”。
  3. 在实验运行一段时间(FCM 和 In-App Messaging 至少 7 天,Remote Config 则要求 14 天)后,此页面上的数据会指明哪个变体(如果有)是“领先变体”。一些衡量结果会用条形图来以可视化的格式呈现数据。

向所有用户发布实验

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

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

    • 对于使用 Notifications Composer 的实验,请使用发布消息对话框向未参与该实验的其余目标用户发送消息。
    • 对于 Remote Config 实验,请选择一个变体以确定要更新的 Remote Config 参数值。创建实验时指定的定位条件将作为新条件添加到您的模板中,以确保发布仅影响实验所定位的用户。点击在 Remote Config 中查看以查看更改后,点击发布更改以完成发布。
    • 对于 In-App Messaging 实验,请使用对话框确定哪个变体需要作为独立 In-App Messaging 宣传活动发布。选择变体后,系统会将您重定向到 FIAM 编写屏幕,您可以根据需要在其中对变体进行任何更改,然后再发布变体。

扩大实验规模

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

  1. Firebase 控制台导航栏的吸引部分,点击 A/B Testing
  2. 选择要修改的正在运行的实验。
  3. 实验概览中,点击上下文菜单 (),然后点击修改正在运行的实验
  4. 定位对话框会显示一个选项,用于增加当前正在进行的实验的用户所占的百分比。选择一个大于当前百分比的数字,然后点击发布。系统就会将实验推送给您所指定的用户群中该百分比的用户。

复制或停止实验

  1. Firebase 控制台导航栏的吸引部分,点击 A/B Testing
  2. 点击已完成正在运行,将光标悬停在实验上,点击上下文菜单 (),然后点击复制实验停止实验

用户定位

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

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

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

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

用户受众群体 包含全部、
包含至少一个、
不包含全部、
不包含至少一个
选择一个或多个 Analytics 受众群体,以定位可以参与实验的用户。 一些针对 Google Analytics(分析)受众群体的实验可能需要几天时间来累积数据,因为它们会受到 Analytics 数据处理延迟的影响。对于在创建后 24-48 小时内加入符合条件的受众群体的新用户或最近创建的受众群体,最有可能遇到这种延迟。

对于 Remote Config,这意味着,即使用户从技术上讲符合某个受众群体的条件,但如果在执行“activateFetched”时 Analytics 尚未将用户添加到该受众群体,该用户也不会被纳入到实验中。

用户属性 对于文本:
包含、
不包含、
完全匹配、
包含正则表达式

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

在客户端上,您只能为用户属性设置字符串值。对于使用数值运算符的条件,Remote Config 服务会将相应用户属性的值转换为整数/浮点数。
当使用包含正则表达式运算符时,您可以创建 RE2 格式的正则表达式。您的正则表达式可以与目标版本字符串的全部或部分文本匹配。您还可以使用 ^$ 定位点来与目标字符串的开头部分、结尾部分或全部文本匹配。
设备所在国家/地区 不适用 用于选择哪些用户可参与实验的一个或多个国家或地区。  
设备语言 不适用 用于选择哪些用户可参与实验的一种或多种语言和语言区域。 此定位条件仅适用于 Remote Config。
首次打开 超过
小于
介于
根据用户首次打开您的应用的时间(以天数指定)来定位用户。 此定位条件仅适用于 Firebase In-App Messaging。
上次应用互动 超过
小于
介于
根据用户上次与您的应用互动的时间(以天数指定)来定位用户。 此定位条件仅适用于 Firebase In-App Messaging。

A/B Testing 指标

创建实验时,您需要选择主要或“目标”指标,以确定胜出的变体。您还应跟踪其他指标,以便更好地了解每个实验变体的效果,并跟踪可能因变体而异的重要趋势,例如用户留存率、应用稳定性和应用内购买收入。在实验中,您最多可以跟踪五个非目标指标。

例如,假设您使用 Remote Config 在应用中启动两个不同的游戏流程,并且希望针对应用内购买和广告收入进行优化,但您也希望跟踪每个变体的稳定性和用户留存率。 在这种情况下,您可以考虑选择估算总收入作为目标指标,因为它包含应用内购买收入和广告收入,然后对于要跟踪的其他指标,您可以添加以下指标:

  • 如需跟踪每日和每周的用户留存率,请添加留存人数(2-3 天)留存人数(4-7 天)
  • 如需比较两个游戏流程之间的稳定性,请添加未遇到崩溃问题的用户数
  • 如需查看每种收入类型的更多详细视图,请添加购买收入估算广告收入

下方各表提供了有关如何计算目标指标和其他指标的详细信息。

目标指标

指标 说明
未遇到崩溃问题的用户数 在实验期间,未在您的应用中遇到 Firebase Crashlytics SDK 所检测到的错误的用户所占的百分比。
估算的广告收入 估算的广告收入。
估算的总收入 购买活动收入和估算的广告收入的总价值。
购买活动带来的收入 所有 purchasein_app_purchase 事件的总价值。
留存人数(1 天) 每天访问您的应用的用户数。
留存人数(2-3 天) 间隔 2-3 天后访问您的应用的用户数。
留存人数(4-7 天) 间隔 4-7 天后访问您的应用的用户数。
留存人数(8-14 天) 间隔 8-14 天后访问您的应用的用户数。
留存人数(15 天以上) 在距离上次使用您的应用 15 天(或更长时间)后访问应用的用户数。
first_open 用户在安装或重新安装应用后首次打开该应用时触发的 Analytics 事件。用作转化漏斗的一部分。

其他指标

指标 说明
notification_dismiss 当 Notifications Composer 所发出的通知被忽略时触发的 Analytics 事件(仅适用于 Android)。
notification_receive 当收到 Notifications Composer 所发出的通知且应用正在后台运行时触发的 Analytics 事件(仅适用于 Android)。
os_update 一个用于跟踪设备操作系统何时更新为新版本的 Analytics 事件。如需了解详情,请参阅自动收集的事件
screen_view 一个用于跟踪您的应用中的屏幕浏览量的 Analytics 事件。如需了解详情,请参阅跟踪屏幕浏览量
session_start 一个用于统计应用中的用户会话数的 Analytics 事件。如需了解详情,请参阅自动收集的事件

BigQuery 数据导出服务

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

为了充分利用 BigQuery 数据导出服务,Firebase 项目应采用“Blaze”随用随付定价方案。 BigQuery 会收取数据存储、流式插入和数据查询的费用, 但免费提供数据加载和导出服务。如需了解详情,请参阅 BigQuery 价格BigQuery 沙盒

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

若要查询实验的分析数据,请执行以下操作:

  1. 正在运行的实验列表中,选择所需的实验以打开实验结果页。
  2. 实验概览窗格中的 上下文菜单中,选择查询实验数据(此选项不适用于免费层级的项目)。

    这将打开 BigQuery 控制台的查询编辑器,其中预先加载了自动生成的实验数据查询示例,以供您参考。在该查询中,您的实验编码为用户属性,实验名称包含在键中,而实验变体包含在值中。

  3. 在查询编辑器中,选择运行查询。结果显示在下方窗格中。

请注意,由于 BigQuery 中的 Firebase 数据每天只更新一次,因此实验页面中的数据可能会比 BigQuery 控制台中的数据更新。