Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

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

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

当您使用 Firebase Remote Config 为具有活跃用户群的应用程序部署设置时,您希望确保一切正确。您可以使用 A/B 测试实验来最好地确定以下内容:

  • 实现功能以优化用户体验的最佳方式。很多时候,应用程序开发人员直到他们的应用程序在应用程序商店中的评级下降时,才知道他们的用户不喜欢新功能或更新的用户体验。 A/B 测试可以帮助衡量您的用户是否喜欢新的功能变体,或者他们是否喜欢当前存在的应用程序。此外,将大多数用户保留在基线组中可确保您的大多数用户群可以继续使用您的应用程序,而不会在实验结束之前对其行为或外观进行任何更改。
  • 为业务目标优化用户体验的最佳方式。有时您正在实施产品更改以最大化收入或保留等指标。通过 A/B 测试,您可以设置业务目标,然后 Firebase 执行统计分析以确定变体的性能是否优于所选目标的基线。

要使用基线对功能变体进行 A/B 测试,请执行以下操作:

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

创建实验

远程配置实验让您可以评估一个或多个远程配置参数的多个变体。

  1. 登录到Firebase 控制台并验证您的项目中是否启用了 Google Analytics,以便实验可以访问 Analytics 数据。

    如果您在创建项目时未启用 Google Analytics,则可以在集成选项卡上启用它,您可以使用Firebase 控制台中的 >项目设置访问该选项卡。

  2. Firebase 控制台导航栏的参与部分中,单击A/B 测试

  3. 单击创建实验,然后在系统提示您选择要试验的服务时选择远程配置

  4. 为您的实验输入名称和可选的描述,然后单击下一步

  5. 填写定位字段,首先选择使用您的实验的应用程序。您还可以通过单击,然后从以下列表中选择选项来定位一部分用户参与您的实验:

    • 版本:您应用的一个或多个版本
    • Build number:应用程序的版本代码
    • 语言:一种或多种语言和区域设置,用于选择可能包含在实验中的用户
    • 国家/地区:一个或多个国家或地区,用于选择应包含在实验中的用户
    • 用户受众:用于定位可能包含在实验中的用户的分析受众
    • 用户属性:一个或多个 Analytics 用户属性,用于选择可能包含在实验中的用户
    • 首次打开:根据用户第一次打开您的应用来定位用户

      选择 Android 或 iOS 应用程序后,可以按首次打开时间进行用户定位。目前,以下 Remote Config SDK 版本支持它:Apple 平台 SDK v9.0.0+ 和 Android SDK v21.1.1+ (Firebase BoM v30.3.0+)。

      在第一次打开事件期间,还必须在客户端上启用分析。

  6. 设置目标用户的百分比:输入与目标用户下设置的条件相匹配的应用用户群的百分比,您希望将其平均分配给实验中的基线和一个或多个变体。这可以是 0.01% 到 100% 之间的任何百分比。用户被随机分配到每个实验,包括重复实验。

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

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

    • app_install
    • app_remove
    • app_update
    • dynamic_link_first_open
  8. 对于实验的目标,选择要跟踪的主要指标,然后从下拉列表中添加任何所需的附加指标。这些包括内置目标(购买、收入、保留、无崩溃用户等)、分析转换事件和其他分析事件。完成后,单击下一步

  9. 变体部分,您将为实验选择一个基线和至少一个变体。使用Choose or create new列表添加一个或多个参数进行试验。您可以创建一个以前未在 Firebase 控制台中使用过的参数,但它必须存在于您的应用程序中才能生效。您可以重复此步骤以将多个参数添加到您的实验中。

  10. (可选)要向实验添加多个变体,请点击添加另一个变体

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

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

  13. 单击查看以保存您的实验。

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

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

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

  1. 获取安装授权令牌如下:

    迅速

    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)")
    })
    

    目标-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());
          }
        });
    

    统一

    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 测试
  3. 单击Draft (和/或Running for Remote Config experiments),将鼠标悬停在您的实验上,单击上下文菜单 ( ),然后单击Manage test devices
  4. 输入测试设备的安装授权令牌,然后选择要发送到该测试设备的实验变体。
  5. 运行应用程序并确认所选变体正在测试设备上接收。

要了解有关 Firebase 安装的更多信息,请参阅管理 Firebase 安装

管理您的实验

无论您是使用 Remote Config、Notifications composer 还是 Firebase In-App Messaging 创建实验,您都可以随后验证并开始实验,在实验运行时监控实验,并增加运行实验中包含的用户数量。

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

开始实验

  1. Firebase 控制台导航栏的参与部分中,单击A/B 测试
  2. 单击草稿,然后单击您的实验的标题。
  3. 要验证您的应用程序是否有将包含在您的实验中的用户,请展开草稿详细信息并检查定位和分布部分中大于0%的数字(例如, 1% 的用户符合条件)。
  4. 要更改您的实验,请点击编辑
  5. 要开始您的实验,请点击Start Experiment 。每个项目一次最多可以运行 24 个实验。

监控实验

实验运行一段时间后,您可以检查其进度并查看到目前为止已参与实验的用户的结果。

  1. Firebase 控制台导航栏的参与部分中,单击A/B 测试
  2. 单击Running ,然后单击或搜索实验的标题。在此页面上,您可以查看有关正在运行的实验的各种观察和建模统计信息,包括以下内容:

    • 与基线的差异百分比:衡量给定变体的指标相对于基线的改进程度。通过比较变体的值范围与基线的值范围来计算。
    • 击败基线的概率:给定变体击败所选指标的基线的估计概率。
    • observed_metric per user :根据实验结果,这是指标值随时间落入的预测范围。
    • Total observed_metric :基线或变体的观察到的累积值。该值用于衡量每个实验变体的执行情况,并用于计算ImprovementValue rangeProbability to beat baselineProbability to be the best variant 。根据测量的指标,此列可能会标记为“每个用户的持续时间”、“每个用户的收入”、“保留率”或“转化率”。
  3. 在您的实验运行一段时间后(FCM 和应用内消息传递至少 7 天,远程配置至少 14 天),此页面上的数据表明哪个变体(如果有)是“领导者”。一些测量伴随着条形图,以可视化格式显示数据。

向所有用户推出实验

在实验运行足够长的时间以至于您有一个“领导者”或获胜变体作为您的目标指标后,您可以将实验推广到 100% 的用户。这允许您选择一个变体以发布给所有用户。即使您的实验没有产生明显的赢家,您仍然可以选择向所有用户推出一个变体。

  1. Firebase 控制台导航栏的参与部分中,单击A/B 测试
  2. 单击已完成或正在运行,单击要向所有用户推出的实验,单击上下文菜单 ( ),然后单击推出变体
  3. 通过执行以下操作之一向所有用户推出您的实验:

    • 对于使用Notifications composer的实验,使用Roll out message对话框将消息发送给未参与实验的其余目标用户。
    • 对于远程配置实验,选择一个变体以确定要更新的远程配置参数值。创建实验时定义的目标条件将作为新条件添加到您的模板中,以确保推出仅影响实验所针对的用户。单击Remote Config 中的 Review查看更改后,单击Publish changes完成部署。
    • 对于应用内消息实验,使用对话框确定需要将哪个变体作为独立的应用内消息活动推出。选择后,您将被重定向到 FIAM 撰写屏幕,以便在发布前进行任何更改(如果需要)。

展开实验

如果您发现实验没有为 A/B 测试带来足够的用户来宣布领导者,您可以增加实验的分布以覆盖更大比例的应用用户群。

  1. Firebase 控制台导航栏的参与部分中,单击A/B 测试
  2. 选择要编辑的正在运行的实验。
  3. Experiment overview中,单击上下文菜单 ( ),然后单击Edit running experiment
  4. Targeting对话框显示一个选项,用于增加当前正在运行的实验中的用户百分比。选择一个大于当前百分比的数字并单击Publish 。实验将被推送到您指定的用户百分比。

复制或停止实验

  1. Firebase 控制台导航栏的参与部分中,单击A/B 测试
  2. 单击已完成或正在运行,将鼠标悬停在您的实验上,单击上下文菜单 ( ),然后单击复制实验停止实验

用户定位

您可以使用以下用户定位条件来定位要包含在您的实验中的用户。

定位标准操作员笔记
版本包含,
不含,
完全匹配,
包含正则表达式
为您要包含在实验中的一个或多个应用程序版本输入一个值。

当使用任何containsdoes not containmatches exactly operators 时,您可以提供以逗号分隔的值列表。

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

用户受众包括所有,
至少包括以下一项,
不包括所有,
至少不包括以下一项
选择一个或多个 Analytics 受众以定位可能包含在您的实验中的用户。一些针对 Google Analytics 受众的实验可能需要几天时间来积累数据,因为它们受 Analytics数据处理延迟的影响。对于新用户,您最有可能遇到这种延迟,他们通常在创建后 24-48 小时内注册到符合条件的受众群体中,或者对于最近创建的受众群体

对于 Remote Config,这意味着即使用户在技术上符合观众资格,如果 Analytics 在执行 fetchAndActivate() 时尚未将用户添加到观众中,则该用户将不会包含在实验中。

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

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

在客户端上,您只能为用户属性设置字符串值。对于使用数字运算符的条件,远程配置服务会将相应用户属性的值转换为整数/浮点数。
使用包含正则表达式运算符时,您可以创建RE2格式的正则表达式。您的正则表达式可以匹配全部或部分目标版本字符串。您还可以使用^$锚点来匹配目标字符串的开头、结尾或整个内容。
国家/地区不适用一个或多个国家或地区用于选择可能包含在实验中的用户。
语言不适用一种或多种语言和区域设置用于选择可能包含在实验中的用户。
先开

根据用户第一次打开您的应用来定位用户:

  • 选择新用户以定位在指定的未来日期和时间后首次打开您的应用程序的用户。
  • 选择时间范围以定位在您指定的日期和时间之前或之后的范围内首次打开您的应用程序的用户。结合BeforeAfter条件来定位特定时间范围内的用户。

选择 Android 或 iOS 应用程序后,可以使用首次打开的用户定位。目前,以下 Remote Config SDK 版本支持它:Apple 平台 SDK v9.0.0+ 和 Android SDK v21.1.1+ (Firebase BoM v30.3.0+)。

在第一次打开事件期间,还必须在客户端上启用分析。

A/B 测试指标

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

例如,假设您正在使用 Remote Config 在您的应用中启动两个不同的游戏流程,并且想要优化应用内购买和广告收入,但您还想跟踪每个变体的稳定性和用户保留率。在这种情况下,您可以考虑选择Estimated total revenue作为您的目标指标,因为它包括应用内购买收入和广告收入,然后,对于要跟踪的其他指标,您可以添加以下内容:

  • 要跟踪每日和每周的用户留存率,请添加留存率(2-3 天)留存率(4-7 天)
  • 为了比较两个游戏流程的稳定性,添加Crash-free users
  • 要查看每种收入类型的更详细视图,请添加Purchase revenueEstimated ad revenue

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

目标指标

公制描述
无崩溃用户在实验期间 Firebase Crashlytics SDK 检测到的未在您的应用中遇到错误的用户百分比。
预计广告收入预计广告收入。
预计总收入合并购买价值和估计的广告收入。
采购收入所有purchasein_app_purchase事件的总价值。
保留(1 天)每天返回您的应用的用户数量。
保留(2-3 天)在 2-3 天内返回您的应用的用户数量。
保留(4-7 天)在 4-7 天内返回您的应用的用户数量。
保留(8-14 天)在 8-14 天内返回您的应用的用户数量。
保留(15 天以上)在上次使用您的应用 15 天或更长时间后返回您的应用的用户数量。
首先打开当用户在安装或重新安装应用程序后首次打开应用程序时触发的 Analytics 事件。用作转化漏斗的一部分。

其他指标

公制描述
notification_dismiss 通知当通知编辑器发送的通知被取消时触发的 Analytics 事件(仅限 Android)。
通知接收当应用程序处于后台时收到通知编辑器发送的通知时触发的 Analytics 事件(仅限 Android)。
操作系统更新跟踪设备操作系统何时更新到新版本的 Analytics 事件。要了解更多信息,请参阅自动收集的事件
屏幕视图跟踪在您的应用程序中查看的屏幕的 Analytics 事件。要了解更多信息,请参阅跟踪屏幕浏览量
session_start统计应用中用户会话的 Analytics 事件。要了解更多信息,请参阅自动收集的事件

BigQuery 数据导出

您可以在BigQuery中访问与 A/B 测试相关的所有分析数据。 BigQuery 允许您使用 BigQuery SQL 分析数据,将其导出到另一个云提供商,或将数据用于您的自定义 ML 模型。有关详细信息,请参阅将 BigQuery 链接到 Firebase

为充分利用 BigQuery 数据导出,Firebase 项目应采用“Blaze”即用即付定价计划。 BigQuery 对存储数据、流​​式插入和查询数据收费。加载和导出数据是免费的。有关详细信息,请参阅BigQuery 定价BigQuery 沙盒

首先,请确保您的 Firebase 项目已链接到 BigQuery。从左侧导航栏中选择设置 > 项目设置,然后选择集成 > BigQuery > 链接。此页面显示用于为项目中的所有应用程序执行 BiqQuery 分析数据导出的选项。

查询实验的分析数据:

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

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

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

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