Catch up on highlights from Firebase at Google I/O 2023. 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

    val forceRefresh = true
    FirebaseInstallations.getInstance().getToken(forceRefresh)
        .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(forceRefresh: true).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 控制台中可用的數據更新。