了解 2023 年 Google I/O 大会上介绍的 Firebase 亮点。了解详情

使用 A/B 測試創建消息傳遞實驗

當您接觸用戶或開始新的營銷活動時,您需要確保做得正確。 A/B 測試可以通過測試用戶群的選定部分的消息變體來幫助您找到最佳的措辭和演示。無論您的目標是提高商品保留率還是轉化率,A/B 測試都可以執行統計分析,以確定消息變體是否優於您所選目標的基準。

要使用基線對功能變體進行 A/B 測試,請執行以下操作:

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

創建一個實驗

使用通知編輯器的實驗允許您評估單個通知消息的多個變體。

  1. 登錄Firebase 控制台並驗證您的項目中是否啟用了 Google Analytics(分析),以便實驗能夠訪問 Analytics 數據。

    如果您在創建項目時未啟用 Google Analytics,則可以在“集成”選項卡上啟用它,您可以使用Firebase 控制台中的 > “項目設置”來訪問該選項卡。

  2. Firebase 控制台導航欄的Engage部分中,單擊A/B 測試

  3. 單擊“創建實驗” ,然後在提示您選擇要實驗的服務時選擇“通知”

  4. 輸入實驗的名稱和可選說明,然後單擊“下一步”

  5. 填寫“定位”字段,首先選擇使用您的實驗的應用程序。您還可以通過選擇包含以下內容的選項來定位一部分用戶參與您的實驗:

    • 版本:您的應用程序的一個或多個版本
    • 用戶受眾:用於定位可能包含在實驗中的用戶的分析受眾
    • 用戶屬性:一個或多個 Analytics 用戶屬性,用於選擇可能包含在實驗中的用戶
    • 國家/地區:一個或多個國家或地區,用於選擇可能參與實驗的用戶
    • 設備語言:用於選擇可能包含在實驗中的用戶的一種或多種語言和區域設置
    • 首次打開:根據用戶第一次打開您的應用程序的時間來定位用戶
    • 上次應用互動:根據用戶上次與您的應用互動的時間來定位用戶
  6. 設置目標用戶的百分比:選擇與目標用戶下設置的條件相匹配的應用用戶群的百分比,您希望在實驗中將其平均分配到基準和一個或多個變體中。該百分比可以是 0.01% 到 100% 之間的任意百分比。每個實驗(包括重複實驗)的百分比會隨機重新分配給用戶。

  7. “變體”部分的“輸入消息”文本字段中鍵入要發送到基線組的消息。要不向基準組發送消息,請將此字段留空。

  8. (可選)要向實驗中添加多個變體,請點擊“添加變體” 。默認情況下,實驗有一種基線和一種變體。

  9. (可選)為實驗中的每個變體輸入一個名稱,以替換名稱Variant AVariant B等。

  10. 為您的實驗定義一個目標指標,以便在評估實驗變體時使用,並從下拉列表中定義任何所需的其他指標。這些指標包括內置目標(參與度、購買量、收入、保留率等)、Analytics 轉化事件和其他 Analytics 事件。

  11. 選擇您的消息的選項:

    • 交付日期:選擇“立即發送”以在保存後立即啟動實驗,或者選擇“計劃”指定將來啟動實驗的時間。
    • 高級選項:要為實驗中包含的所有通知選擇高級選項,請展開高級選項,然後更改任何列出的消息選項。
  12. 單擊“查看”以保存您的實驗。

每個項目最多允許進行 300 個實驗,其中最多可包含 24 個正在運行的實驗,其餘為草稿或已完成。

在測試設備上驗證您的實驗

對於每個 Firebase 安裝,您可以檢索與其關聯的 FCM 註冊令牌。您可以使用此令牌在安裝了應用程序的測試設備上測試特定的實驗變體。要在測試設備上驗證您的實驗,請執行以下操作:

  1. 獲取 FCM 註冊令牌如下:

    迅速

    Messaging.messaging().token { token, error in
      if let error = error {
        print("Error fetching FCM registration token: \(error)")
      } else if let token = token {
        print("FCM registration token: \(token)")
        self.fcmRegTokenMessage.text  = "Remote FCM registration token: \(token)"
      }
    }
    

    Objective-C

    [[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) {
      if (error != nil) {
        NSLog(@"Error getting FCM registration token: %@", error);
      } else {
        NSLog(@"FCM registration token: %@", token);
        self.fcmRegTokenMessage.text = token;
      }
    }];
    

    Java

    FirebaseMessaging.getInstance().getToken()
        .addOnCompleteListener(new OnCompleteListener<String>() {
            @Override
            public void onComplete(@NonNull Task<String> task) {
              if (!task.isSuccessful()) {
                Log.w(TAG, "Fetching FCM registration token failed", task.getException());
                return;
              }
    
              // Get new FCM registration token
              String token = task.getResult();
    
              // Log and toast
              String msg = getString(R.string.msg_token_fmt, token);
              Log.d(TAG, msg);
              Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });

    Kotlin+KTX

    FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
        if (!task.isSuccessful) {
            Log.w(TAG, "Fetching FCM registration token failed", task.exception)
            return@OnCompleteListener
        }
    
        // Get new FCM registration token
        val token = task.result
    
        // Log and toast
        val msg = getString(R.string.msg_token_fmt, token)
        Log.d(TAG, msg)
        Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
    })

    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.Messaging.FirebaseMessaging.DefaultInstance.GetTokenAsync().ContinueWith(
      task => {
        if (!(task.IsCanceled || task.IsFaulted) && task.IsCompleted) {
          UnityEngine.Debug.Log(System.String.Format("FCM registration token {0}", task.Result));
        }
      });
    
  2. Firebase 控制台導航欄上,單擊A/B 測試
  3. 單擊草稿,將鼠標懸停在您的實驗上,單擊上下文菜單 ( ),然後單擊管理測試設備
  4. 輸入測試設備的 FCM 令牌,然後選擇要發送到該測試設備的實驗變體。
  5. 運行應用程序並確認測試設備正在接收所選變體。

管理您的實驗

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

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

開始實驗

  1. Firebase 控制台導航欄的Engage部分中,單擊A/B 測試
  2. 單擊草稿,然後單擊實驗的標題。
  3. 要驗證您的應用是否包含將包含在您的實驗中的用戶,請展開草稿詳細信息並在“定位和分發”部分中檢查是否有大於0%的數字(例如, 1% 的用戶符合條件)。
  4. 要更改您的實驗,請單擊“編輯”
  5. 要開始實驗,請單擊“開始實驗” 。每個項目一次最多可以運行 24 個實驗。

監控實驗

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

  1. Firebase 控制台導航欄的Engage部分中,單擊A/B 測試
  2. 單擊“運行” ,然後單擊或搜索實驗的標題。在此頁面上,您可以查看有關正在運行的實驗的各種觀察到的和建模的統計數據,包括以下內容:

    • 與基線的差異百分比:與基線相比,對給定變體的指標改進的衡量。通過將變體的值範圍與基線的值範圍進行比較來計算。
    • 擊敗基線的概率:給定變體擊敗所選指標的基線的估計概率。
    • observed_metric per user :根據實驗結果,這是指標值隨著時間的推移將落入的預測範圍。
    • Total observed_metric :基線或變體的觀察累積值。該值用於衡量每個實驗變體的執行情況,並用於計算改進值範圍擊敗基線的概率成為最佳變體的概率。根據測量的指標,此列可能被標記為“每個用戶的持續時間”、“每個用戶的收入”、“保留率”或“轉化率”。
  3. 在您的實驗運行一段時間後(FCM 和應用內消息傳遞至少 7 天,遠程配置至少 14 天),此頁面上的數據會指示哪個變體(如果有)是“領先者”。有些測量結果附有條形圖,以可視化格式呈現數據。

向所有用戶推出實驗

當實驗運行足夠長的時間,您的目標指標有了“領先者”或獲勝變體後,您就可以向 100% 的用戶推出該實驗。這允許您選擇一個變體以發布給所有用戶。即使您的實驗沒有產生明顯的勝利者,您仍然可以選擇向所有用戶推出變體。

  1. Firebase 控制台導航欄的Engage部分中,單擊A/B 測試
  2. 單擊“已完成”或“正在運行” ,單擊要向所有用戶推出的實驗,單擊上下文菜單 ( ),然後單擊“推出變體”
  3. 通過執行以下操作之一向所有用戶推出您的實驗:

    • 對於使用通知編輯器的實驗,請使用轉出消息對話框將消息發送給未參與實驗的其餘目標用戶。
    • 對於遠程配置實驗,選擇一個變體以確定要更新哪些遠程配置參數值。創建實驗時定義的定位條件將作為新條件添加到模板中,以確保推出僅影響實驗所定位的用戶。單擊“遠程配置”中的“查看”以查看更改後,單擊“發布更改”以完成部署。
    • 對於應用程序內消息傳遞實驗,使用該對話框來確定需要將哪個變體作為獨立的應用程序內消息傳遞活動推出。選擇後,您將被重定向到 FIAM 撰寫屏幕,以便在發布之前進行任何更改(如果需要)。

展開實驗

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

  1. Firebase 控制台導航欄的Engage部分中,單擊A/B 測試
  2. 選擇您要編輯的正在運行的實驗。
  3. 實驗概述中,單擊上下文菜單 ( ),然後單擊編輯正在運行的實驗
  4. “目標”對話框顯示一個選項,用於增加當前正在運行的實驗中的用戶百分比。選擇一個大於當前百分比的數字,然後單擊“發布” 。實驗將推送至您指定的用戶百分比。

重複或停止實驗

  1. Firebase 控制台導航欄的Engage部分中,單擊A/B 測試
  2. 單擊“已完成”或“正在運行” ,將鼠標懸停在您的實驗上,單擊上下文菜單 ( ),然後單擊“複製實驗”“停止實驗”

用戶定位

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

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

當使用任何包含不包含完全匹配運算符時,您可以提供以逗號分隔的值列表。

使用contains 正則表達式運算符時,您可以創建RE2格式的正則表達式。您的正則表達式可以匹配全部或部分目標版本字符串。您還可以使用^$錨點來匹配目標字符串的開頭、結尾或整個。

用戶受眾包括所有,
至少包括以下之一,
不包括全部,
不包括至少一項
選擇一個或多個 Analytics 受眾群體來定位可能包含在您的實驗中的用戶。一些針對 Google Analytics(分析)受眾群體的實驗可能需要幾天的時間來積累數據,因為它們會受到 Analytics(分析)數據處理延遲的影響。新用戶最有可能遇到這種延遲,這些新用戶通常會在創建後 24-48 小時內註冊到合格受眾群體中,或者是最近創建的受眾群體
用戶屬性對於文本:
包含,
不含,
完全匹配,
包含正則表達式

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

在客戶端上,您只能設置用戶屬性的字符串值。對於使用數字運算符的條件,遠程配置服務會將相應用戶屬性的值轉換為整數/浮點型。
使用contains 正則表達式運算符時,您可以創建RE2格式的正則表達式。您的正則表達式可以匹配全部或部分目標版本字符串。您還可以使用^$錨點來匹配目標字符串的開頭、結尾或整個。
國家/地區不適用用於選擇可能包含在實驗中的用戶的一個或多個國家或地區。
語言不適用用於選擇可能包含在實驗中的用戶的一種或多種語言和區域設置。
首次開放多於
少於
之間
根據用戶第一次打開應用程序的時間(以天為單位)來定位用戶。
上次應用參與度多於
少於
之間
根據用戶上次與您的應用互動的時間(以天為單位)來定位用戶。

A/B 測試指標

創建實驗時,您選擇一個主要指標或目標指標,用於確定獲勝變體。您還應該跟踪其他指標,以幫助您更好地了解每個實驗變體的性能,並跟踪每個變體可能不同的重要趨勢,例如用戶保留率、應用穩定性和應用內購買收入。您可以在實驗中跟踪最多五個非目標指標。

例如,假設您已將新的應用內購買添加到您的應用中,並希望比較兩種不同“推動”消息的有效性。在這種情況下,您可能決定選擇將購買收入設置為目標指標,因為您希望獲勝變體代錶帶來最高應用內購買收入的通知。由於您還想跟踪哪個變體帶來了更多的未來轉化並保留了用戶,因此您可以在要跟踪的其他指標中添加以下內容:

  • 估算總收入,了解兩種變體之間的應用內購買和廣告總收入有何不同
  • 保留(1 天)保留(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 天或更長時間後返回該應用的用戶數量。
首先打開當用戶安裝或重新安裝應用程序後首次打開應用程序時觸發的 Analytics 事件。用作轉化漏斗的一部分。

其他指標

公制描述
通知關閉當通知編輯器發送的通知被忽略時觸發的 Analytics 事件(僅限 Android)。
通知接收當應用程序在後台時收到通知編輯器發送的通知時觸發的 Analytics 事件(僅限 Android)。
操作系統更新跟踪設備操作系統何時更新到新版本的 Analytics 事件。要了解更多信息,請參閱自動收集的事件
屏幕視圖跟踪在您的應用程序中查看的屏幕的 Analytics 事件。要了解更多信息,請參閱跟踪屏幕視圖
會話開始對應用程序中的用戶會話進行計數的 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 控制台中的可用數據更新。