Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

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

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

當您與用戶聯繫或開始新的營銷活動時,您希望確保自己做對了。 A/B 測試可以通過在用戶群的選定部分上測試消息變體來幫助您找到最佳措辭和呈現方式。無論您的目標是提高報價的保留率還是轉化率,A/B 測試都可以執行統計分析,以確定消息變體是否優於您所選目標的基線。

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

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

創建實驗

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

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

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

  2. Firebase 控制台導航欄的參與部分,點擊A/B 測試

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

  4. 為您的實驗輸入名稱和可選描述,然後單擊下一步

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

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

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

  8. (可選)要向您的實驗添加多個變體,請點擊Add Variant 。默認情況下,實驗有一個基線和一個變體。

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

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

  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. 單擊Draft ,將鼠標懸停在您的實驗上,單擊上下文菜單 ( ),然後單擊Manage test devices
  4. 輸入測試設備的 FCM 令牌並選擇要發送到該測試設備的實驗變體。
  5. 運行應用程序並確認在測試設備上接收到所選變體。

管理您的實驗

無論您是使用 Remote Config、Notifications composer 還是 Firebase In-App Messaging 創建實驗,您都可以驗證和啟動實驗,在實驗運行時對其進行監控,並增加正在運行的實驗中包含的用戶數量。

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

開始實驗

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

監控實驗

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

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

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

向所有用戶推出實驗

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

  1. Firebase 控制台導航欄的參與部分,點擊A/B 測試
  2. 單擊CompletedRunning ,單擊要向所有用戶推出的實驗,單擊上下文菜單 ( ),然後單擊Roll out variant
  3. 通過執行以下操作之一向所有用戶推出您的實驗:

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

展開實驗

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

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

複製或停止實驗

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

用戶定位

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

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

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

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

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

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

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

A/B 測試指標

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

例如,假設您已將新的應用內購買添加到您的應用中,並且想要比較兩個不同“輕推”消息的有效性。在這種情況下,您可能決定選擇將購買收入設置為您的目標指標,因為您希望獲勝的變體代表導致最高應用內購買收入的通知。而且因為您還想跟踪哪個變體導致更多的未來轉化和留存用戶,您可以在Other metrics to track中添加以下內容:

  • 估算總收入,以了解您的應用內購買和廣告收入在兩種變體之間的差異
  • 留存(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 天或更長時間後返回您的應用的用戶數量。
first_open當用戶在安裝或重新安裝應用後首次打開應用時觸發的 Analytics 事件。用作轉化漏斗的一部分。

其他指標

公制描述
notification_dismiss當通知編輯器發送的通知被解除時觸發的 Analytics 事件(僅限 Android)。
通知接收一個 Analytics 事件,當應用處於後台時收到通知編寫器發送的通知時觸發(僅限 Android)。
os_update跟踪設備操作系統何時更新到新版本的 Analytics 事件。要了解更多信息,請參閱自動收集的事件
screen_view跟踪在您的應用程序中查看的屏幕的分析事件。要了解更多信息,請參閱跟踪屏幕瀏覽量
session_start統計應用中用戶會話的 Analytics 事件。要了解更多信息,請參閱自動收集的事件

BigQuery 數據導出

您可以在BigQuery中訪問與您的 A/B 測試相關的所有分析數據。 BigQuery 允許您使用 BigQuery SQL 分析數據,將其導出到另一個雲提供商,或將數據用於您的自定義 ML 模型。如需了解詳情,請參閱將 BigQuery 鏈接到 Firebase

為了充分利用 BigQuery 數據導出,Firebase 項目應採用“Blaze”即用即付定價計劃。 BigQuery 對存儲數據、流式插入和查詢數據收費。加載和導出數據是免費的。請參閱BigQuery 定價BigQuery 沙盒了解更多信息。

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

要查詢實驗的分析數據:

  1. 從您的活動實驗列表中,選擇所需的實驗以打開實驗結果頁面。
  2. 實驗概覽窗格中的上下文菜單中,選擇查詢實驗數據(此選項不適用於免費層上的項目)。

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

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

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