使用 A/B 測試創建 Firebase 遠程配置實驗

當您更新應用程序並使用 Firebase 遠程配置將其推送到具有活躍用戶群的應用程序時,您需要確保正確。您可能不確定以下幾點:

  • 實現功能以優化用戶體驗的最佳方式。很多時候,應用程序開發人員直到他們的應用程序在應用程序商店中的評分下降時才知道他們的用戶不喜歡新功能或更新的用戶體驗。 A/B 測試可以幫助衡量您的用戶是否喜歡新的功能變體,或者他們是否喜歡當前存在的應用程序。此外,將您的大多數用戶保留在一個控制組中可確保您的大多數用戶群可以繼續使用您的應用程序,而其行為或外觀不會發生任何變化,直到實驗結束。
  • 針對業務目標優化用戶體驗的最佳方式。有時,您正在實施產品更改以最大限度地提高收入或保留率等指標。通過 A/B 測試,您可以設置業務目標,Firebase 會進行統計分析,以確定變體是否在您選擇的目標方面優於對照組。

要使用控制組進行 A/B 測試功能變體,請執行以下操作:

  1. 創建您的實驗。
  2. 在測試設備上驗證您的實驗。
  3. 管理您的實驗。

創建實驗

一個遠程配置實驗,您可以評估一個或多個多個變種遠程配置參數

  1. 登錄火力地堡,更新數據共享設置,確保數據共享已啟用。如果沒有數據共享,您的實驗將無法訪問分析數據。
  2. 在的卡鉗火力地堡控制台導航欄中,單擊A / B測試
  3. 單擊創建實驗,然後提示您選擇要進行實驗的服務時選擇遠程配置
  4. 輸入一個名稱和可選的說明為您的實驗,然後單擊下一步
  5. 填寫瞄準領域,首先選擇了使用實驗的應用程序。您還可以通過選擇包括以下內容的選項來定位一部分用戶參與您的實驗:

    • 版本:一個或多個版本的應用
    • 用戶群:用於目標用戶分析受眾誰可能被包含在實驗
    • 用戶屬性:誰可能被包括在實驗中,用戶選擇一個或多個分析用戶屬性
    • 預測:通過機器學習預測用戶組從事特定行為
    • 國家/地區:一個或多個國家或地區,用戶選擇誰可能被包含在實驗
    • 設備語言:用於選擇用戶的一個或多個語言和區域設置誰可能被包含在實驗
  6. 設置目標用戶的百分比:要對照組和一個或多個實驗中的變體之間平均分配輸入您的應用程序的用戶群的匹配下,目標用戶設定的標準的百分比。這可以是 0.01% 到 100% 之間的任何百分比。用戶被隨機分配到每個實驗,包括重複的實驗。

  7. (可選)設置激活事件以確保只有首先觸發某些 Analytics 事件的用戶才計入您的實驗。為了確保vaild實驗,讓您的應用程序激活取配置值後,確保你選擇的事件發生。類似事件first_opensession_start前可能發生activateFetched()從而導致意外結果。

  8. 對於該實驗的目標中,選擇的主要指標進行跟踪,並從下拉列表中添加任何期望的附加指標。其中包括內置目標(參與度、購買、收入、保留等)、Analytics 轉化事件和其他 Analytics 事件。完成後,單擊下一步

  9. 變異單元,你會選擇一個對照組和實驗至少一種變體。使用選擇或創建新的列表添加一個或多個參數進行試驗。您可以創建一個以前未在 Firebase 控制台中使用過的參數,但它必須存在於您的應用中才能發揮作用。您可以重複此步驟以將多個參數添加到您的實驗中。

  10. (可選)要多於一個變種添加到您的實驗,請點擊添加另一種變體

  11. 更改特定變體的一個或多個參數。對於未包含在實驗中的用戶,任何未更改的參數都是相同的。

  12. 點擊查看,保存了實驗。

每個項目最多允許進行 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]);
    }];
    

    爪哇

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

    科特林+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. 火力地堡控制台導航欄中,單擊A / B測試
  3. 點擊草案(和/或運行於遠程配置實驗),將鼠標懸停在實驗中,單擊快捷菜單( ),然後單擊管理測試設備
  4. 輸入測試設備的安裝身份驗證令牌,然後選擇要發送到該測試設備的實驗變體。
  5. 運行應用程序並確認所選變體正在測試設備上接收。

要了解更多關於火力地堡安裝,請參閱管理火力地堡設施

管理您的實驗

無論您是使用遠程配置、通知編輯器還是 Firebase 應用內消息創建實驗,您都可以驗證並開始實驗,在實驗運行時監控實驗,並增加正在運行的實驗中包含的用戶數量。

實驗完成後,您可以記下獲勝變體使用的設置,然後將這些設置推廣給所有用戶。或者,您可以運行另一個實驗。

開始實驗

  1. 在的卡鉗火力地堡控制台導航欄中,單擊A / B測試
  2. 點擊草稿,然後點擊相應的實驗稱號。
  3. 為了驗證你的應用程序有誰也納入實驗的使用者,展開細節草案,並檢查在定位和分佈截面的數量大於0%(例如,用戶的標準匹配的1%)。
  4. 要改變你的實驗中,單擊編輯
  5. 要開始實驗,請點擊開始實驗。每個項目一次最多可以運行 24 個實驗。

監控實驗

實驗運行一段時間後,您可以檢查其進度並查看到目前為止參與實驗的用戶的結果。

  1. 在的卡鉗火力地堡控制台導航欄中,單擊A / B測試
  2. 點擊運行,然後按一下實驗的稱號。在此頁面上,您可以查看有關正在運行的實驗的各種觀察到的和建模的統計信息,包括以下內容:

    • 從基線%差:相比於基線(或對照組)的度量的提高對於給定的變體的一種度量。通過將變體的值範圍與基線的值範圍進行比較來計算。
    • 概率擊敗基線:估計概率指定版本擊敗所選的指標基線。
    • observed_metric每個用戶:根據實驗結果,這是所預測的範圍,該量度值將落入隨時間。
    • observed_metric :對於對照組或變體所觀察到的累計值。該值用來衡量如何好每個實驗變體進行,並且用於計算的改進值範圍概率到節拍基線,與概率是最好的變體。根據衡量的指標,此列可能標記為“每位用戶的持續時間”、“每位用戶的收入”、“留存率”或“轉化率”。
  3. 在您的實驗運行一段時間後(對於 FCM 和應用內消息傳遞至少 7 天,或者對於遠程配置至少 14 天),此頁面上的數據表明哪個變體(如果有)是“領導者”。一些測量值附有條形圖,以可視化格式呈現數據。

向所有用戶推出一項實驗

在實驗運行足夠長的時間後,對於目標指標,您有了“領導者”或獲勝變體,您可以將實驗推廣到 100% 的用戶。這允許您選擇一個變體以發布給所有用戶。即使您的實驗沒有創造出明顯的贏家,您仍然可以選擇向所有用戶推出一個變體。

  1. 在的卡鉗火力地堡控制台導航欄中,單擊A / B測試
  2. 點擊完成正在運行,要鋪開到所有用戶,單擊快捷菜單(點擊實驗 ),然後單擊鋪開變種
  3. 通過執行以下操作之一向所有用戶推出您的實驗:

    • 對於使用的通知作曲家的實驗,用搖出消息對話框將消息發送給誰不是實驗的一部分,其餘的目標用戶。
    • 對於遠程配置實驗,選擇一個變體以確定要更新哪些遠程配置參數值。創建實驗時定義的定位條件將作為新條件添加到您的模板中,以確保推出僅影響實驗定位的用戶。點擊評論中的遠程配置查看更改後,點擊發布更改即可完成部署。
    • 對於應用內消息傳遞實驗,使用對話框來確定需要將哪個變體作為獨立的應用內消息傳遞活動推出。選擇後,您將被重定向到 FIAM 撰寫屏幕以在發布前進行任何更改(如果需要)。

展開實驗

如果您發現實驗沒有為 A/B 測試帶來足夠的用戶來宣布領先者,您可以增加實驗的分發範圍,以覆蓋更大比例的應用用戶群。

  1. 在的卡鉗火力地堡控制台導航欄中,單擊A / B測試
  2. 選擇要編輯的正在運行的實驗。
  3. 實驗概述,單擊快捷菜單( ),然後單擊編輯的運行試驗
  4. 定位對話框顯示的選項來增加誰是當前正在運行的實驗用戶所佔的百分比。選擇一個數字高於當前的百分比,然後單擊發布。實驗將被推送到您指定的用戶百分比。

複製或停止實驗

  1. 在的卡鉗火力地堡控制台導航欄中,單擊A / B測試
  2. 點擊完成正在運行,將鼠標懸停在實驗中,單擊快捷菜單( ),然後單擊複製實驗停止實驗

用戶定位

您可以使用以下用戶定位條件來定位要包含在實驗中的用戶。

定位標準操作員筆記
版本包含,
不含,
完全匹配,
包含正則表達式
為要包含在實驗中的一個或多個應用程序版本輸入一個值。

當使用任何包含不包含,或火柴正是運營商,可以提供一個逗號分隔值列表。

當使用含有正則表達式運算符,你可以創建正則表達式RE2格式。您的正則表達式可以匹配全部或部分目標版本字符串。您也可以使用^$錨的開始,結束,或目標串的整體匹配。

用戶受眾包括所有的,
包括以下至少一項,
不包括所有,
不包括以下至少一項
選擇一個或多個 Analytics 受眾以定位可能包含在您的實驗中的用戶。
用戶屬性對於文本:
包含,
不含,
完全匹配,
包含正則表達式

對於數字:
<、≤、=、≥、>
Analytics 用戶屬性用於選擇可能包含在實驗中的用戶,並提供一系列用於選擇用戶屬性值的選項。

在客戶端上,您只能為用戶屬性設置字符串值。對於使用數字運算符的條件,遠程配置服務將相應用戶屬性的值轉換為整數/浮點數。
當使用含有正則表達式運算符,你可以創建正則表達式RE2格式。您的正則表達式可以匹配全部或部分目標版本字符串。您也可以使用^$錨的開始,結束,或目標串的整體匹配。
預言不適用由 Firebase Predictions 定義的目標用戶組 - 例如,可能停止使用您的應用的用戶,或可能進行應用內購買的用戶。選擇 Firebase 預測工具定義的值之一。如果某個選項不可用,您可能需要通過訪問 Firebase 控制台的“預測”部分來選擇加入 Firebase 預測。
設備國家不適用一個或多個國家或地區用於選擇可能包含在實驗中的用戶。
設備語言不適用一種或多種語言和區域設置用於選擇可能包含在實驗中的用戶。此定位條件僅適用於遠程配置。
先開多於
少於
之間
根據用戶第一次打開您的應用程序的時間來定位用戶,以天為單位。此定位條件僅適用於 Firebase 應用內消息傳遞。
上次應用互動多於
少於
之間
根據用戶上次與您的應用互動的時間(以天為單位)來定位用戶。此定位條件僅適用於 Firebase 應用內消息傳遞。

A/B 測試指標

創建實驗時,您可以選擇用於比較實驗變體的指標,也可以選擇其他指標進行跟踪,以幫助您更好地了解每個實驗變體並檢測任何重大副作用(例如應用程序崩潰)。下表提供了有關如何計算目標指標和其他指標的詳細信息。

目標指標

公制描述
保留(1 天)每天返回您的應用的用戶數量。
保留(2-3天)在 2-3 天內返回您的應用的用戶數量。
保留(4-7 天)在 4-7 天內返回您的應用的用戶數量。
保留(8-14 天)在 8-14 天內返回您的應用的用戶數量。
保留(15 天以上)在上次使用您的應用 15 天或更長時間後返回該應用的用戶數量。
通知打開跟踪用戶是否打開通知編輯器發送的通知。
採購收入所有總價值ecommerce_purchasein_app_purchase事件。
估算的 AdMob 收入AdMob 的估算收入。
預計總收入購買價值和估計的 AdMob 收入的組合。
首先_打開當用戶在安裝或重新安裝應用程序後首次打開應用程序時觸發的分析事件。用作轉化漏斗的一部分。
通知_打開當用戶打開通知編輯器發送的通知時觸發的 Analytics 事件。用作轉化漏斗的一部分。

其他指標

公制描述
無崩潰用戶在您的應用中未遇到 Firebase Crashlytics SDK 在實驗期間檢測到的錯誤的用戶百分比。
通知_解除當通知編輯器發送的通知被關閉時觸發的 Analytics 事件(僅限 Android)。
通知接收當應用程序處於後台時收到通知編輯器發送的通知時觸發的分析事件(僅限 Android)。
操作系統更新一個分析事件,當設備操作系統更新為新version.To軌道了解更多信息,請參見自動收集的事件
屏幕視圖跟踪在您的應用中查看的屏幕的 Analytics 事件。要了解更多信息,請參閱跟踪畫面瀏覽
會話開始一個分析事件,用於計算您應用中的用戶會話。要了解更多信息,請參見自動收集的事件
用戶參與度當您的應用程序處於前台時定期觸發的 Analytics 事件。要了解更多信息,請參見自動收集的事件

BigQuery 數據導出

您可以訪問所有的分析關係到你的A / B測試數據的BigQuery 。 BigQuery 允許您使用 BigQuery SQL 分析數據,將其導出到另一個雲提供商,或將數據用於您的自定義 ML 模型。見鏈接的BigQuery到火力地堡以獲取更多信息。

要充分利用 BigQuery 數據導出,Firebase 項目應採用“Blaze”即用即付定價計劃。 BigQuery 對存儲數據、流式插入和查詢數據收費。加載和導出數據是免費的。見BigQuery的定價,或BigQuery的沙箱以獲取更多信息。

首先,請確保您的 Firebase 項目已鏈接到 BigQuery。選擇設置>項目設置從左側的導航欄,然後選擇集成>的BigQuery>鏈接。此頁面顯示為項目中的所有應用程序執行 BiqQuery 分析數據導出的選項。

要查詢實驗的分析數據:

  1. 積極的實驗列表中,選擇所需的實驗打開實驗結果頁面。
  2. 實驗概述窗格上下文菜單中選擇查詢實驗數據(此選項不適用於在自由層的項目)。

    這將打開 BigQuery 控制台的查詢編輯器,其中包含預加載的實驗數據的自動生成示例查詢以供您查看。在此查詢中,您的實驗被編碼為用戶屬性,鍵中包含實驗名稱,值中包含實驗變體。

  3. 在查詢構造,選擇運行查詢。結果顯示在下部窗格中。

請注意,由於 BigQuery 中的 Firebase 數據每天僅更新一次,因此實驗頁面中可用的數據可能比 BigQuery 控制台中可用的數據更新。