AdMob+Firebase 102 Unity:不更新應用程式即可調整應用程式行為

1. 簡介

假設您在 Play 商店發布應用程式後,需要調整應用程式中的某些參數值。通常您應該重新發布新版應用程式,並要求使用者更新手機上的應用程式。

一般來說,如果您想對應用程式進行長期變更,可以更新應用程式。不過,如果您要經常調整應用程式中某些參數的值,該怎麼做呢?或者,您想進行一些實驗,找出最佳應用程式設定嗎?

在這些情況下,應用程式更新可能無法正常運作。因為更新需要一段時間才會完全發布給使用者。此外,跨多個應用程式版本執行實驗相當困難。

此外,如何判斷應用程式的使用者歷程是否正常運作?您可能會參考 Play 管理中心的使用者留言。不過,這可能不夠精確,無法做出明確的決策。

課程內容

  • 如何在 Google Analytics for Firebase 中建立漏斗
  • 如何使用 Firebase 遠端設定
  • 如何執行 Firebase A/B 測試

軟硬體需求

  • Unity 2018.4.4f1 以上版本
  • Xcode 10 以上版本 (用於建構 iOS 目標)
  • Google 帳戶
  • 搭載 Android 5.0 以上版本的測試裝置,以及用來連接裝置的 USB 傳輸線;或是執行 AVD(Android 虛擬裝置) 的 Android 模擬器,以及支援 Play 商店/Google API 的系統映像檔
  • 搭載 iOS 8.0 以上版本的 iOS 裝置或模擬器

您對 AdMob 的使用經驗程度為何?

新手 中級 熟練

您對 Firebase 的經驗程度如何?

新手 中級 熟練

2. 設定開發環境

下載程式碼

點選下方按鈕即可下載這個程式碼研究室的所有程式碼:

將下載的 ZIP 檔案解壓縮。這會解壓縮名為「admob-firebase-codelabs-unity-master」的根資料夾。

...或從指令列複製 GitHub 存放區。

$ git clone https://github.com/googlecodelabs/admob-firebase-codelabs-unity

存放區包含下列四個資料夾:

  • android_studio_folder.png101-base:您將在本程式碼研究室中建構的起始程式碼。
  • android_studio_folder.png101-complete_and_102-base:本程式碼研究室的完成程式碼,以及 102 程式碼研究室的範例程式碼。
  • android_studio_folder.png102-complete:102 程式碼研究室的完成程式碼。

準備必要檔案

「Awesome Drawing Quiz」使用多個開放原始碼,因此必須編譯並執行專案。

開啟終端機,然後移至存放區根目錄。接著,從終端機執行 ./gradlew :prepareThirdPartyFiles (Windows 上的 gradlew.bat :prepareThirdPartyFiles),將必要檔案複製到專案中。

匯入範例應用程式

啟動 Unity,然後在歡迎畫面中選擇「Open」。然後從下載的程式碼中選取 101-complete_and_102-base 目錄。

現在應該已在 Unity 中開啟專案。

新增 Google Mobile Ads Unity 外掛程式

如要在 Unity 應用程式中放送 AdMob 廣告,您必須將 Google Mobile Ads Unity 外掛程式新增至專案。

  1. 下載 Google Mobile Ads Unity 外掛程式 3.18.1 套件。(請注意,本程式碼研究室可能與其他版本的外掛程式不相容)
  2. 在「Awesome Drawing Quiz」Unity 專案中。在專案中,依序前往「Assets」>「Import Package」>「Custom Package」
  3. 將下載的 GoogleMobileAds.unitypackage 匯入專案。

您也需要設定 AdMob 營利應用程式 ID。在 Unity 編輯器中,依序選取選單中的「Assets」>「Google Mobile Ads」>「Settings」

44fc84fe88235c1f.png

按一下「Google AdMob」部分下方的「已啟用」核取方塊,啟用 AdMob。然後輸入 AdMob 應用程式 ID,如下所示:

  • Android:ca-app-pub-3940256099942544~3048611032
  • iOS:ca-app-pub-3940256099942544~2753522596

a6ad7402d4daf330.png

將 Firebase 設定檔新增至 Unity 專案

  1. 在「Awesome Drawing Quiz」專案的總覽畫面中,按一下「設定」圖示 9bacb5ada7cbaaf6.png
  2. 在「一般」分頁下方,選取每個 Android 和 iOS 應用程式,下載 google-service.json (適用於 Android) 和 GoogleService-Info.plist (適用於 iOS) 檔案。
  3. 將這兩個設定檔移至 Unity 專案的 android_studio_folder.png「Assets」資料夾。

704aa8e97df63c4e.png

新增 Firebase Analytics SDK

  1. 下載 Firebase Unity SDK 5.5.0,然後解壓縮至方便使用的位置。(如果已下載 SDK,請略過這個步驟)
  2. 開啟「Awesome Drawing Quiz」Unity 專案,然後依序前往「Assets」>「Import Package」>「Custom Package」
  3. 在已解壓縮的 SDK 中,匯入 Firebase Analytics SDK (dotnet4/FirebaseAnalytics.unitypackage)。
  4. 在「Import Unity package」視窗中,按一下「Import」

3. 從控制台開啟 Firebase 專案

在繼續下一個步驟之前,請從 Firebase 控制台開啟專案,該專案是在 AdMob + Firebase 101 程式碼研究室的「設定 Firebase 專案」步驟中建立。

e0a028059c9e00cb.png

4. 建立應用程式事件漏斗

您可能已新增幾個應用程式事件,用於追蹤應用程式內的使用者活動。只要查看各個應用程式事件的報表,就能取得與事件相關的詳細資料,例如總計次數、每位使用者的平均次數、客層等。

不過,如果想查看一系列事件的完成率,而不是只關注特定事件,該怎麼做呢?在 Google Analytics for Firebase 中,您可以使用「程序」,以視覺化方式呈現一系列應用程式事件的完成率,並進行最佳化。

建立漏斗

如要建立程序,請按照下列步驟執行:

  1. 前往 Firebase 控制台,然後選取先前建立的「Awesome Drawing Quiz」專案。
  2. 按一下「漏斗」
  3. 按一下 [新增程序]
  4. 輸入程序的名稱和說明。
  5. 選取要做為程序中步驟的前兩個事件。
  6. 如要新增更多步驟,請按一下 [新增其他事件],然後選取某個事件。
  7. 點選「建立」。

按照上述步驟建立下列漏斗:

#1 程序名稱:層級成功率 事件:level_startlevel_successd3bc78ef61a261d7.png

#2 漏斗名稱:插頁式獎勵廣告完成率 事件:ad_reward_promptad_reward_impressionad_reward45c9542dfa663014.png

#3 漏斗名稱:遊戲完成率 事件:game_startgame_completedab25e8501746d5f.png

查看程序分析

建立漏斗後,您可以在 Firebase 主控台的「漏斗」選單中存取漏斗。按一下清單中的漏斗名稱,即可查看各個漏斗的詳細分析。

620c0e84587c8ad4.png

舉例來說,按一下「等級成功率」。系統會顯示漏斗詳細資料,如下所示:

c889f9b6ece15847.png

從上方的螢幕截圖中,您可以看到使用者在開始關卡 (觸發 level_start 事件) 後,完成關卡 (觸發 level_success 事件) 的百分比。從這裡可以看出,有 46.2% 的使用者已通過關卡。

點選「事件計數」後,系統會根據事件數顯示指標,如下所示:

d044fb7b07e6e0d9.png

根據上述螢幕截圖中的指標,這段期間內有 116 次嘗試 (觸發 level_start 事件),以及 57 次通關 (觸發 level_success 事件)。

由於以事件為準的完成率(49.1%) 略高於以使用者為準的完成率(46.2%),因此可以說有少數人的表現優於其他人。

5. 將遠端設定整合至應用程式

您可以根據應用程式事件和漏斗取得應用程式的洞察資料,因此可能需要最佳化應用程式,通常包括微調應用程式中的參數值。如要修改這些參數的值,您必須更新應用程式,變更才能套用至使用者。

使用 Firebase 中的遠端設定,您不必更新應用程式就能調整這些值,也就是說,不必強制使用者下載更新,就能變更應用程式行為,避免打擾使用者。

在本程式碼研究室中,您將瞭解如何使用 Remote Config,調整獎勵金額 (觀看獎勵影片廣告後揭露的字母數量),不必更新應用程式。

加入 Firebase 遠端設定 SDK

  1. 下載 Firebase Unity SDK 5.5.0,然後解壓縮至方便使用的位置。
  2. 開啟「Awesome Drawing Quiz」Unity 專案,然後依序前往「Assets」>「Import Package」>「Custom Package」
  3. 從解壓縮的 SDK 匯入遠端設定 SDK (dotnet4/FirebaseRemoteConfig.unitypackage)。
  4. 在「Import Unity package」視窗中,按一下「Import」

匯入 Firebase.RemoteConfig

修改 Main.cs,允許您使用 Firebase.RemoteConfig 中的型別,而不必使用完整名稱。

Scenes/Main.cs

...

using AwesomeDrawingQuiz.Game;

// TODO: Import Firebase.RemoteConfig (102)
using Firebase.RemoteConfig;

namespace AwesomeDrawingQuiz.Scene {
    ...
}

初始化並擷取遠端設定值

修改 Main.cs 中的 InitAndFetchRemoteConfig() 方法,初始化遠端設定執行個體,如下所示。請注意,GameSettings.KEY_REWARD_AMOUNT 會保留遠端設定中的參數名稱。(您將在本程式碼研究室中宣告這個欄位)

Scenes/Main.cs

private Task InitAndFetchRemoteConfig() {
    // TODO: Initialize and Fetch values from the Remote Config (102)
    Dictionary<string, object> defaults = new Dictionary<string, object>();
    defaults.Add(GameSettings.KEY_REWARD_AMOUNT, 1);
    FirebaseRemoteConfig.SetDefaults(defaults);

    if (Debug.isDebugBuild) {
        ConfigSettings config = new ConfigSettings();
        config.IsDeveloperMode = true;
        FirebaseRemoteConfig.Settings = config;
        return FirebaseRemoteConfig.FetchAsync(System.TimeSpan.Zero);
    } else {
        return FirebaseRemoteConfig.FetchAsync();
    }
}

您會看到 FirebaseRemoteConfig 執行個體已設為在偵錯模式中從伺服器擷取最新值,以利開發程序。(IsDeveloperMode = trueFetchAsync(System.TimeSpan.Zero) 負)

啟用擷取的遠端設定值

成功擷取遠端設定值後,請啟用這些值,讓應用程式可以使用。請按照下列方式修改 ActivateRemoteConfigValues() 方法。

Scenes/Main.cs

private void ActivateRemoteConfigValues() {
    // TODO: Activate fetched Remote Config values (102)
    FirebaseRemoteConfig.ActivateFetched();
}

修改 Start() 方法

如要讓應用程式在啟動時擷取及啟用遠端設定值,請按照下列方式修改 Main.cs 檔案中的 Start() 方法。

Scenes/Main.cs

void Start () {
    ...
    Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
        ...
    }).ContinueWith(task => { 
        // TODO: Call InitAndFetchRemoteConfig() (102)
        InitAndFetchRemoteConfig();
    }).ContinueWith(task => {
        // TODO: Call ActivateRemoteConfigValues() (102)
        ActivateRemoteConfigValues();

        // Enable 'Start a game' button
        UnityMainThreadDispatcher.Instance()
            .Enqueue(() => buttonStartGame.interactable = true);
    });
    #else
    QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_MAIN);

    // TODO: Call InitAndFetchRemoteConfig() (102)
    InitAndFetchRemoteConfig().ContinueWith(task => {
        // TODO: Call ActivateRemoteConfigValues() (102)
        ActivateRemoteConfigValues();
    });
    #endif
}

從遠端設定擷取獎勵金額

修改 GameSettings 類別,從遠端設定擷取獎勵金額。

Game/GameSettings.cs

// TODO: Import Firebase.RemoteConfig (102)
using Firebase.RemoteConfig;

namespace AwesomeDrawingQuiz.Game {
    public class GameSettings {

        ...
        
        // TODO: Apply reward amount from the Remote Config (102)
        public const string KEY_REWARD_AMOUNT = "reward_amount";

        public static GameSettings Instance {
            get {
                return instance;
            }
        }

        ...

        public int RewardAmount {
            get {
                // TODO: Apply reward amount from the Remote Config (102)
                return (int) FirebaseRemoteConfig.GetValue(KEY_REWARD_AMOUNT).LongValue;
            }
            private set { }
        }
    }
}

從控制台建立遠端設定參數

接著,您將建立新的獎勵金額遠端設定參數,以便即時調整其值。

如要建立新參數,請前往 Firebase 控制台,然後選取先前建立的「Awesome Drawing Quiz」專案。按一下「Remote Config」->「ADD YOUR FIRST PARAMETER」(新增第一個參數) 按鈕。

7f52617141c53726.png

將參數命名為 reward_amount,並將預設值設為 1。然後按一下「新增參數」按鈕。

cbc771fd1685b29c.png

按一下「發布變更」按鈕,即可向使用者發布變更。

d6a6aa4a60e06ee9.png

6. 使用遠端設定變更應用程式行為

現在只要在 Firebase 控制台中設定「Awesome Drawing Quiz」的獎勵金額,不必更新應用程式程式碼。

在本節中,您要將獎勵金額從 1 改為 2,讓應用程式在觀看獎勵廣告後,再顯示兩個字元做為提示。

更新 reward_amount 參數的預設值

前往 Firebase 控制台,然後選取先前建立的「Awesome Drawing Quiz」專案。按一下「遠端設定」,然後點按清單中的 reward_amount。接著,將預設值變更為 2,然後按一下「更新」按鈕。

9a9bd8a26a39bfe3.png

按一下「發布變更」按鈕,即可向使用者發布變更。

d6a6aa4a60e06ee9.png

確認應用程式行為變更

如要確認應用程式行為是否有所變更,請再次執行專案。看完獎勵廣告後,您會發現應用程式現在會顯示兩個字母做為獎勵,這是在 Remote Config 控制台中設定的。

觀看獎勵廣告前

揭露兩個額外字母做為獎勵

7. 建立實驗,找出最佳獎勵金額

現在,您不必發布應用程式更新,就能變更獎勵金額。不過,如何判斷變更的金額是否對應用程式有益?

使用 Firebase A/B 測試功能,即可執行實驗來改善應用程式的整體使用者體驗,不必更新應用程式,也不必另外建立工具來執行及追蹤各項實驗的成效。

設計實驗

建立新實驗前,請先設定明確的實驗目標。建立新實驗前,請務必先完成下列檢查清單。

  • 目標:您想改善哪一項指標?(例如遊戲難度、廣告顯示時間/能見度等)
  • 原因:您執行實驗的業務目標是什麼?(例如盡量提高廣告收益、提高留存率等)
  • 對象:誰會成為實驗對象?(例如:所有使用者、特定使用者目標對象等)

在本程式碼研究室中,您將建立實驗,盡量提高 Awesome Drawing Quiz 的每日使用者參與度,並找出最佳獎勵金額。

建立實驗

Firebase 控制台開啟 Awesome Drawing Quiz 專案。選取「A/B 測試」選單,然後按一下「建立實驗」按鈕。

選取「遠端設定」,建立遠端設定實驗。

f38a85328ab54e7e.png

將實驗命名為「獎勵金額」,如下列螢幕截圖所示。

15d552adb61c0b08.png

設定指定目標選項。在本程式碼研究室中,您將以 Awesome Drawing Quiz 的所有使用者為目標。

61b316741a63050f.png

由於實驗的主要目標是找出可讓每日使用者參與度達到最高值的最佳值,請選取「每日使用者參與度」做為追蹤的主要指標。

694641b57d90ff65.png

最後,請設定控制組和變化版本群組,找出成效較佳的群組。從控制組選取 reward_amount,並保留其值不變。將變體群組命名為「Less reward」(較少獎勵),然後將 reward_amount 的值變更為 1。

10ed7f5b06858519.png

完成這項設定後,「較少獎勵」群組的成員會獲得一封信做為獎勵,而「控制組」的成員則會獲得兩封信。因此,您會看到獎勵金額對使用者的影響。

點選「查看」按鈕後,您會看到實驗總覽,如下所示。

ae6477ce79f6265d.png

執行實驗

按一下「開始實驗」按鈕,即可執行實驗。請注意,實驗開始後就無法變更設定。

7131bf9b4fa74fa5.png

8. 管理實驗

查看實驗進度

您可以在 Firebase 控制台的「A/B 測試」選單中查看實驗進度,如下列螢幕截圖所示。請注意,您也可以在資訊卡中查看過去 30 分鐘內參與實驗的使用者人數。

8a7009bdd8871d95.png

點選清單中的實驗後,即可查看實驗詳細資料。在實驗能宣告領先者 (即成效最佳的變化版本) 前,您會看到「現在宣告領先者還為時過早」訊息。

a4e7ca3e3f4711cd.png

實驗執行一段時間後,系統就會開始在「改善總覽」部分下方,顯示實驗期間收集到的資料。您可以比較各個版本的成效,判斷何者成效較佳。下方的螢幕截圖顯示「改善總覽」專區的範例。

e2d00fc27c053fd3.png

在「改善總覽」部分下方的表格中,您可以查看實驗目標指標的詳細資料,以及實驗中追蹤的其他指標。下方的螢幕截圖顯示指標詳細資料區段的範例。

c3859d642f85cc52.png

向所有使用者推出領導者

實驗執行一段時間後,如果出現領先者 (即勝出版本),即可向所有使用者套用實驗設定。A/B 測試找出明顯的領先者後,系統會建議您向所有使用者推出領先版本。

86cb6a6c07516634.png

不過,即使實驗結果沒有明顯的領先版本,您仍可向所有使用者顯示特定變化版本。

在實驗詳細資料畫面中,點選內容選單 ( 73afe611adf58774.png),然後點選「推出變體」

374e1c72be1d0656.png

選擇要向所有使用者推出的變體,然後點選「在遠端設定中查看」按鈕,在遠端設定中進行變更前先檢查變更。

e176f6e6a72c754.png

確認草稿沒有任何問題後,請按一下「發布變更」按鈕,向所有使用者發布變更。

d65d545620ce93f6.png

9. 大功告成!

您已完成 AdMob + Firebase 102 Unity 程式碼研究室。您可以在 android_studio_folder.png102-complete 資料夾中找到本程式碼實驗室的完整程式碼。