AdMob+Firebase 101 Unity:設定與Analytics 基本概念

1. 簡介

廣告是應用程式整體使用者體驗中很重要的一環。良好的廣告導入方式有助於提升整體應用程式體驗,甚至提高使用者留存率和參與度。舉例來說,您可以利用獎勵廣告,以應用程式內貨幣或觀看影片廣告的使用者獎勵使用者,這樣使用者就能根據新的高度,一直碰到難以解或流失的情形。

不過,提供絕佳的廣告體驗並不容易。您或許會想問:這些廣告的顯示頻率為何?請問你該在何時何地放送這些素材資源?獎勵內容是什麼?可惜的是,答案會因應用程式和刊登位置而有所差異。沒有一體適用的答案。

藉助 Google Analytics for Firebase、AdMob 和其他 Firebase 簡單易用的工具,輕鬆以資料為依據微調應用程式,更加輕鬆簡單。今天我們將說明如何踏出第一步!

建構項目

本程式碼研究室是前三個程式碼研究室之一,可引導您建構一款名為 Awesome Drawing Quiz 的應用程式,這款遊戲可讓玩家猜測繪圖的名稱。說明如何在遊戲中加入獎勵廣告和 Firebase 服務。

在本程式碼研究室中,您將整合 Google Analytics for Firebase 來記錄部分重要的應用程式事件。以及如何讀取 Firebase 控制台中顯示的應用程式數據分析。

課程內容

  • 如何在應用程式中設定 Google Analytics for Firebase
  • 如何記錄應用程式事件
  • 如何讀取 Firebase 控制台中顯示的應用程式數據分析

軟硬體需求

  • Unity 2018.4.4f1 以上版本
  • Xcode 10 以上版本 (以便建立 iOS 目標)
  • Google 帳戶
  • 搭載 Android 5.0 以上版本的測試裝置 (使用 USB 傳輸線連接裝置或執行 AVD (Android 虛擬裝置) 的 Android Emulator,且系統映像檔支援 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-base 目錄。

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

3. 設定獎勵影片廣告單元 (選用)

為了方便起見,範例應用程式已包含專屬的獎勵影片廣告單元。如果您不想在 AdMob 帳戶下建立新帳戶,可略過這個步驟

Android 設定

若要在帳戶中建立新的 AdMob 應用程式,請按照下列說明操作:

  1. 前往 AdMob 控制台
  2. 在「應用程式」選單中,按一下「新增應用程式」
  3. 當系統詢問「您已經在 Google Play 或 App Store 發布應用程式」時,解答「」。
  4. 將應用程式命名為「Awesome Drawing Quiz」。選擇「Android」做為「平台」,然後按一下「Add」

在帳戶中建立 AdMob 應用程式後,請按照下方步驟建立新的獎勵影片廣告單元。

  1. 在 AdMob 前端按一下 [應用程式] 選單,然後從應用程式清單中選取「超棒繪圖測驗」。
  2. 按一下「廣告單元」選單,然後按一下「新增廣告單元」建立新的獎勵影片廣告單元。
  3. 針對廣告格式選取「獎勵廣告」

7672f41ec611101b.png

  1. 視需要提供廣告單元名稱。接著將獎勵數量設為 1,並將獎勵項目設為「提示」 (這是應用程式目前提供給使用者的獎勵)。然後按一下 [建立廣告單元],建立新的獎勵影片廣告單元。

6d067814a2c38264.png

  1. 成功建立完成後,畫面上會顯示下列操作說明。

4bc1b3b341a5a81c.png

  1. 返回 Unity 專案,然後將 AdMob 應用程式 ID 和廣告單元 ID 常數更新為您在上一個步驟中建立的常數。

Ads/AdManager.cs

namespace AwesomeDrawingQuiz.Ads {
    public class AdManager {

        public const string APP_ID_ANDROID = "YOUR_ADMOB_APP_ID";
        
        ...

        #elif UNITY_ANDROID
        private const string APP_ID = APP_ID_ANDROID;
        public const string AD_UNIT_ID = "<YOUR_AD_UNIT_ID>";

        ...
    }
}

iOS 設定

若要在帳戶中建立新的 AdMob 應用程式,請按照下列說明操作:

  1. 前往 AdMob 控制台
  2. 在「應用程式」選單中,按一下「新增應用程式」
  3. 當系統詢問「您已經在 Google Play 或 App Store 發布應用程式」時,解答「」。
  4. 將應用程式命名為「Awesome Drawing Quiz」。選擇「iOS」做為平台,然後按一下「新增」

在帳戶中建立 AdMob 應用程式後,請按照下方步驟建立新的獎勵影片廣告單元。

  1. 在 AdMob 前端按一下 [應用程式] 選單,然後從應用程式清單中選取「超棒繪圖測驗」。
  2. 按一下「廣告單元」選單,然後按一下「新增廣告單元」建立新的獎勵影片廣告單元。
  3. 針對廣告格式選取「獎勵廣告」

7672f41ec611101b.png

  1. 視需要提供廣告單元名稱。接著將獎勵數量設為 1,並將獎勵項目設為「提示」 (這是應用程式目前提供給使用者的獎勵)。然後按一下 [建立廣告單元],建立新的獎勵影片廣告單元。

6d067814a2c38264.png

  1. 成功建立完成後,畫面上會顯示下列操作說明。

4bc1b3b341a5a81c.png

  1. 返回 Unity 專案,然後將 AdMob 應用程式 ID 和廣告單元 ID 常數更新為您在上一個步驟中建立的常數。

Ads/AdManager.cs

namespace AwesomeDrawingQuiz.Ads {
    public class AdManager {

        public const string APP_ID_IOS = "YOUR_ADMOB_APP_ID";
        
        ...

        #elif UNITY_IOS
        private const string APP_ID = APP_ID_IOS;
        public const string AD_UNIT_ID = "<YOUR_AD_UNIT_ID>";

        ...
    }
}

4. 新增 Google 行動廣告 Unity 外掛程式

匯入外掛程式

若要在 Unity 應用程式上放送 AdMob 廣告,您必須在專案中加入 Google 行動廣告 Unity 外掛程式。

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

設定 AdMob 應用程式 ID

在 Unity 編輯器中,依序選取「Assets」(資產) >「Google 行動廣告 >選單中的「設定」

44fc84fe88235c1f.png

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

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

a6ad7402d4daf330.png

5. 設定 Firebase 專案

透過 Firebase 控制台建立新專案

  1. 前往 Firebase 控制台
  2. 選取「Add Project」,然後將專案命名為「Awesome Drawing Quiz」。

新增 Unity 應用程式

  1. 在新專案的總覽畫面中,按一下「Add Firebase to your Unity app」
  2. 勾選 [註冊為 iOS 應用程式] 核取方塊。
  3. 輸入 iOS 軟體包 ID:com.codelab.awesomedrawingquiz.unity
  4. 提供應用程式暱稱:Awesome Drawing Quiz (Unity 版 Unity)
  5. 勾選「註冊為 Android 應用程式」核取方塊。
  6. 將 Android 套件名稱輸入如下:com.codelab.awesomedrawingquiz.unity
  7. 提供應用程式暱稱:Awesome Drawing Quiz (Unity 版 Android)
  8. 選取「Register App」即可註冊 Android 和 iOS 應用程式。

將 Firebase 設定檔加入 Unity 專案

接下來,系統會顯示提示畫面,您可以在其中下載設定檔,其中包含應用程式所有必要的 Firebase 中繼資料。請下載 google-service.jsonGoogleService-Info.plist 檔案,然後將這兩個檔案移到 Unity 專案中的 android_studio_folder.pngAssets 資料夾。

331c165d80ba105e.png

加入 Firebase Analytics SDK

  1. 下載 Firebase Unity SDK 5.5.0,然後將檔案解壓縮並方便使用。
  2. 開啟 Awesome Drawing Quiz Unity 專案,前往「Assets」Assets >匯入套件 >自訂套件
  3. 從已解壓縮的 SDK 中匯入遠端設定 SDK (dotnet4/FirebaseAnalytics.unitypackage)。
  4. 在「Import Unity package」(匯入 Unity 套件) 視窗中,按一下「Import」

6. 將 AdMob 連結至 Firebase 專案

完成下列步驟,將應用程式連結至 Firebase。

  1. 前往 https://apps.admob.com 登入 AdMob 帳戶。
  2. 按一下側欄中的「應用程式」。
  3. 選取「Awesome Drawing Quiz」。如果「最近使用的應用程式」清單中不包含該應用程式,請按一下 [查看所有應用程式] 來搜尋您加進 AdMob 的所有應用程式。
  4. 按一下側欄中的「應用程式設定」。
  5. 按一下「連結 Firebase」。
  6. 選取「連結至現有的 Firebase 專案並建立新的 Firebase 應用程式」選項。然後選取下拉式選單中的「Awesome Drawing Quiz」專案。
  7. 按下「繼續」按鈕後,您會看見「已成功連結」訊息。按一下「完成」按鈕即可完成作業。

將 AdMob 應用程式連結至 Firebase 專案後,即可在 AdMob 和 Firebase 控制台中解鎖多項額外功能,方法如下:

收益資訊卡 (AdMob)

透過「收益」資訊卡,你可以集中查看所有可能的收益來源。支援的收益來源如下:

  • AdMob (預估)
  • 中介服務廣告聯播網 (觀察到的)
  • 應用程式內購
  • 電子商務購買

10fe118249e11150.png

使用者指標資訊卡 (AdMob)

透過使用者指標資訊卡,您可以查看調整廣告體驗可能對使用者行為造成什麼影響。

5f56366f1b31d4a1.png

獎勵廣告報表 (AdMob)

獎勵廣告報表提供多種指標,協助發布商瞭解使用者與獎勵廣告互動的情形。

658a2868777690ea.png

總收益資訊卡 (Firebase)

將 AdMob 應用程式連結至 Firebase 後,Firebase 資訊主頁中的總收益資訊卡就會顯示 AdMob 收益,以及應用程式內購和電子商務購買。

98cb283977b023a.png

廣告事件報表 (Firebase)

系統會自動收集廣告相關事件 (點擊、曝光和獎勵事件),並用於 Google Analytics for Firebase。

bf77bd8c00c1441b.png

7. 執行專案

編譯並執行專案後,您會在應用程式啟動時看到以下畫面。

f5fbf4565c5d8647.png

點選「開始遊戲」後,螢幕上會顯示繪圖,您的任務是透過頂端顯示的提示猜測繪圖的名稱,即可推斷繪圖名稱的首字母和長度。

bbdf4d23fb08a519.png ad82d7e657945c4d.png

如果您不清楚繪圖的名稱,可以按一下「SKIP」按鈕跳過一個等級。

您可能會需要其他線索,以便猜出答案。只要按一下「HINT」按鈕並觀看獎勵影片廣告,就能獲得額外線索。使用者看完廣告後,系統會顯示一個額外信函做為獎勵。

8c33687361f83a13.png b048d6587c10e9df.png

8. 新增應用程式事件

在「超級繪圖測驗」中深入瞭解使用者歷程,您可以定義一些自訂事件來追蹤使用者在遊戲中的行為,如下所示:

事件名稱

已觸發...

參數

game_start

使用者開始新遊戲時

level_start

使用者在階段開始新關卡 (新的繪圖測驗) 時。(一個階段共有 6 層)

level_name

level_wrong_answer

使用者提交錯誤的答案時

level_name

ad_reward_prompt

當使用者輕觸提示按鈕,系統提示觀看獎勵影片廣告時

ad_unit_id

ad_reward_impression

使用者開始觀看獎勵影片廣告時

ad_unit_id

level_success

當使用者提交正確答案時 (釐清等級)

level_name、number_of_attempts、elapsed_time_sec、hint_used

level_fail

使用者略過特定關卡時

level_name、number_of_attempts、elapsed_time_sec、hint_used

game_complete

比賽結束後

number_of_correct_answers

與每個事件相關的每個參數的說明如下:

事件名稱

參數名稱

說明

level_start

level_name

在層級顯示的繪圖名稱 (例如「香蕉」)

level_wrong_answer

level_name

在層級顯示的繪圖名稱 (例如「香蕉」)

ad_reward_prompt

ad_unit_id

用於顯示獎勵影片廣告的廣告單元 ID

ad_reward_impression

ad_unit_id

用於顯示獎勵影片廣告的廣告單元 ID

level_success

level_name

在層級顯示的繪圖名稱 (例如「香蕉」)

level_success

number_of_attempts

嘗試過通關卡的次數

level_success

elapsed_time_sec

清除特定層級所需的時間長度 (以秒為單位)

level_success

hint_used

使用者是否使用提示 (觀看獎勵影片廣告) 或不清除特定關卡 (1:使用提示 / 0:在沒有提示的情況下清除關卡)

level_fail

level_name

在層級顯示的繪圖名稱 (例如「香蕉」)

level_fail

number_of_attempts

嘗試過通關卡的次數

level_fail

elapsed_time_sec

清除特定層級所需的時間長度 (以秒為單位)

level_fail

hint_used

使用者是否使用提示 (觀看獎勵影片廣告) 或不清除特定關卡 (1:使用提示 / 0:在沒有提示的情況下清除關卡)

game_complete

number_of_correct_answers

在遊戲中清除的關卡數量

建立記錄自訂事件的輔助類別

如要輕鬆記錄數據分析事件,請建立輔助類別來管理自訂事件。

首先,請在 Assets/Scripts 資料夾下建立新資料夾,並命名為 Analytics。接著建立新的 C# 指令碼,並在 Analytics 資料夾內將其命名為 QuizAnalytics.cs

將以下程式碼加入 QuizAnalytics.cs 檔案中。

Analytics/QuizAnalytics.cs

using Firebase.Analytics;

namespace AwesomeDrawingQuiz.Analytics {

    public class QuizAnalytics {

        private const string EVENT_AD_REWARD_PROMPT = "ad_reward_prompt";

        private const string EVENT_AD_REWARD_IMPRESSION = "ad_reward_impression";

        private const string EVENT_LEVEL_FAIL = "level_fail";

        private const string EVENT_LEVEL_SUCCESS = "level_success";

        private const string EVENT_LEVEL_WRONG_ANSWER = "level_wrong_answer";

        private const string EVENT_GAME_START = "game_start";

        private const string EVENT_GAME_COMPLETE = "game_complete";

        private const string PARAM_AD_UNIT_ID = "ad_unit_id";

        private const string PARAM_ELAPSED_TIME_SEC = "elapsed_time_sec";

        private const string PARAM_HINT_USED = "hint_used";

        private const string PARAM_NUMBER_OF_ATTEMPTS = "number_of_attempts";

        private const string PARAM_NUMBER_OF_CORRECT_ANSWERS = "number_of_correct_answers";

        public const string SCREEN_MAIN = "main";

        public const string SCREEN_GAME = "game";

        public static void LogGameStart() {
            FirebaseAnalytics.LogEvent(EVENT_GAME_START);
        }

        public static void LogLevelStart(string levelName) {
            FirebaseAnalytics.LogEvent(FirebaseAnalytics.EventLevelStart, 
                FirebaseAnalytics.ParameterLevelName, levelName);
        }

        public static void LogLevelWrongAnswer(string levelName) {
            FirebaseAnalytics.LogEvent(EVENT_LEVEL_WRONG_ANSWER, 
                FirebaseAnalytics.ParameterLevelName, levelName);
        }

        public static void LogAdRewardPrompt(string adUnitId) {
            FirebaseAnalytics.LogEvent(EVENT_AD_REWARD_PROMPT, PARAM_AD_UNIT_ID, adUnitId);
        }

        public static void LogAdRewardImpression(string adUnitId) {
            FirebaseAnalytics.LogEvent(EVENT_AD_REWARD_IMPRESSION, PARAM_AD_UNIT_ID, adUnitId);
        }

        public static void LogLevelSuccess(
            string levelName, int numberOfAttemps, int elapsedTimeInSec, bool hintUsed
        ) {
            FirebaseAnalytics.LogEvent(EVENT_LEVEL_SUCCESS, new Parameter[] {
                new Parameter(FirebaseAnalytics.ParameterLevelName, levelName),
                new Parameter(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttemps),
                new Parameter(PARAM_ELAPSED_TIME_SEC, elapsedTimeInSec),
                new Parameter(PARAM_HINT_USED, hintUsed ? 1 : 0)
            });
        }

        public static void LogLevelFail(
            string levelName, int numberOfAttempts, int elapsedTimeInSec, bool hintUsed
        ) {
            FirebaseAnalytics.LogEvent(EVENT_LEVEL_FAIL, new Parameter[] {
                new Parameter(FirebaseAnalytics.ParameterLevelName, levelName),
                new Parameter(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttempts),
                new Parameter(PARAM_ELAPSED_TIME_SEC, elapsedTimeInSec),
                new Parameter(PARAM_HINT_USED, hintUsed ? 1 : 0)
            });
        }

        public static void LogGameComplete(int numberOfCorrectAnswers) {
            FirebaseAnalytics.LogEvent(EVENT_GAME_COMPLETE, 
                PARAM_NUMBER_OF_CORRECT_ANSWERS, numberOfCorrectAnswers);
        }

        public static void SetScreenName(string screenName) {
            FirebaseAnalytics.SetCurrentScreen(screenName, null);
        }
    }
}

記錄遊戲中的數據分析事件

開啟 Assets/Scripts/Scenes 資料夾下的 Game.cs 檔案。如要使用位於 AwesomeDrawingQuiz.Analytics 命名空間下方的 QuizAnalytics 類別,請新增 use 指令,如下所示。

Scenes/Game.cs

using AwesomeDrawingQuiz.Ads;

// TODO: Import AwesomeDrawingQuiz.Analytics (101)
using AwesomeDrawingQuiz.Analytics;

...

namespace AwesomeDrawingQuiz.Scene {
   ...
}

接著,在 Start() 函式中呼叫 QuizAnalytics.SetScreenName() 以變更目前畫面的名稱。此外,呼叫 QuizAnalytics.LogGameStart() 表示遊戲已經開始。

Scenes/Game.cs

void Start () {
    // TODO: Log screen name (101)
    QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_GAME);

    ...

    SetHintButtonEnabled(false);

    // TODO: Log game_start event (101)
    QuizAnalytics.LogGameStart();
    
    ...
}

接著,在回呼函式中新增對記錄自訂事件的呼叫,如下所示:

Scenes/Game.cs

public void OnClickHint() {
    // TODO: Log ad_reward_prompt event (101)
    QuizAnalytics.LogAdRewardPrompt(AdManager.AD_UNIT_ID);

    ...
}

...
  
public void OnAdStarted(object sender, EventArgs args) {
    // TODO: Log ad_reward_impression event (101)
    QuizAnalytics.LogAdRewardImpression(AdManager.AD_UNIT_ID);
}

...

public void OnGameOver(object sender, GameOverEventArgs args) {
    // TODO: Log game_complete event (101)
    QuizAnalytics.LogGameComplete(args.NumCorrectAnswers);

    ...
}

public void OnLevelCleared(object sender, LevelClearEventArgs args) {
    // TODO: Log level_success event (101)
    QuizAnalytics.LogLevelSuccess(
        args.Drawing.word, args.NumAttempts, args.ElapsedTimeInSeconds, args.IsHintUsed);

    ...
}

public void OnLevelSkipped(object sender, LevelSkipEventArgs args) {
    // TODO: Log level_fail event (101)
    QuizAnalytics.LogLevelFail(
        args.Drawing.word, args.NumAttempts, args.ElapsedTimeInSeconds, args.IsHintUsed);
}

public void OnNewLevel(object sender, NewLevelEventArgs args) {
    // TODO: Log level_start event (101)
    QuizAnalytics.LogLevelStart(args.Drawing.word);

    ...
}

public void OnWrongAnwser(object sender, WrongAnswerEventArgs args) {
    // TODO: Log level_wrong_answer event (101)
    QuizAnalytics.LogLevelWrongAnswer(args.Drawing.word);

    ...
}

最後,更新 Assets/Scripts/Scenes 資料夾下的 Main.cs 檔案。因此在呼叫 Firebase SDK 中的任何方法前,請先確認 Firebase 是否已準備就緒。

Scenes/Main.cs

using AwesomeDrawingQuiz.Ads;

// TODO: Import AwesomeDrawingQuiz.Analytics (101)
using AwesomeDrawingQuiz.Analytics;

...

namespace AwesomeDrawingQuiz.Scene {
    public class Main : MonoBehaviour {

        ...

        void Start () {
            Screen.sleepTimeout = SleepTimeout.SystemSetting;

            #if UNITY_ANDROID
            // Disable 'Start a game' button until
            // Firebase dependencies are ready to use on the Android
            buttonStartGame.interactable = false;

            // TODO: Check Google Play Services on Android (101)
            // Check Google Play Services on Android device is up to date
            Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
                var dependencyStatus = task.Result;
                if (dependencyStatus == Firebase.DependencyStatus.Available) {
                    Debug.Log("All Firebase services are available");
                    
                    // TODO: Set screen name (101)
                    QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_MAIN);
                } else {
                    throw new System.InvalidOperationException(System.String.Format(
                        "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
                }
            }).ContinueWith(task => {
                // Enable 'Start a game' button
                UnityMainThreadDispatcher.Instance()
                    .Enqueue(() => buttonStartGame.interactable = true);
            });
            #else
            
            // TODO: Set screen name (101)
            QuizAnalytics.SetScreenName(QuizAnalytics.SCREEN_MAIN);
            #endif
        }

        ...
    }
}   

9. 偵錯數據分析事件

您可以使用 DebugView 來驗證事件是否正確記錄。DebugView 可讓您以近乎即時的方式,在開發裝置上查看應用程式記錄的原始事件資料。

在開發的檢測階段進行驗證,這非常實用,可以幫助您找出分析實作方面的錯誤和錯誤。

在 Android 上啟用偵錯模式

一般來說,系統大約會在一小時內以批次方式將應用程式記錄事件記錄下來,然後一起上傳。如要即時驗證數據分析導入作業,必須在開發裝置上啟用偵錯模式,以盡可能縮短延遲時間。

首先,在 Android Studio 中開啟終端機工具。位於底部的工具列中。

c8dc1b4f08a224b8.png

接著執行下列指令 (確認測試 Android 裝置已連線至電腦或 Android Emulator 正在執行):

adb shell setprop debug.firebase.analytics.app com.google.codelab.awesomedrawingquiz

偵錯模式會保持啟用狀態,直到您執行下列指令來明確停用偵錯模式為止:

adb shell setprop debug.firebase.analytics.app .none.

在 iOS 裝置上啟用偵錯模式

如要在開發裝置上啟用 Analytics 偵錯模式,請在 Xcode 中指定下列指令列引數:

-FIRDebugEnabled

偵錯模式會保持啟用狀態;如要停用偵錯模式,請指定下列指令列引數:

-FIRDebugDisabled

使用 DebugView 對 Analytics 事件進行偵錯

在測試裝置上啟用偵錯模式後,請前往 Firebase 控制台,從選單中選取「DebugView」。接著,在測試裝置上玩遊戲,看看系統會記錄事件並在 DebugView 報表中顯示。

827059255d09ac00.png

您可以按一下事件名稱來查看個別事件的詳細資訊。例如,以下螢幕截圖顯示與 level_start 事件相關的參數詳細資料。

475db00d05d03ab8.png

詳情請參閱 DebugView 說明中心文章

10. 啟用參數報表

Google Analytics for Firebase 預設會收集事件總數,但您需要為每個感興趣的事件參數分別開啟自訂參數報表功能。啟用這項功能後,Google Analytics for Firebase 會顯示其他資訊卡,提供自訂參數的統計資料。

為事件登錄自訂參數的步驟如下:

  1. 前往 Firebase 控制台,然後選取先前建立的 Awesome Drawing Quiz 專案。
  2. 按一下導覽選單中的「事件」
  1. 找出要修改的事件,然後按一下該列的 73afe611adf58774.png>。編輯參數報表。

aad40de06ee0c3ad.png

  1. 在 [請輸入參數名稱] 欄位中,填入您要登錄的參數名稱。

注意:如果找不到相符項目,請直接輸入參數名稱,再按一下新增」。e066c761aae4797f.png 5.請參閱下表,並視需要將「類型」欄位設為「文字」或「數字」。如果是數值參數,請務必一併設定「測量單位」欄位。6. 按一下「儲存」按鈕完成設定。

為下方列出的每個事件啟用參數報表。

事件名稱

參數名稱

參數類型

測量單位

level_start

level_name

文字

不適用

level_wrong_answer

level_name

文字

不適用

level_success

level_name

文字

不適用

level_success

number_of_attempts

數字

標準

level_success

elapsed_time_sec

數字

level_success

hint_used

數字

標準

level_fail

level_name

文字

不適用

level_fail

number_of_attempts

數字

標準

level_fail

elapsed_time_sec

數字

level_fail

hint_used

數字

標準

game_complete

number_of_correct_answers

數字

標準

下例顯示 level_success 事件的自訂參數報表設定:

6d569c8c27df2914.png

完成參數報表設定後,您就可以在每個已啟用參數報表功能的事件看到相關聯的參數。

d1a37589d54bca6b.png

11. 透過事件報表取得洞察資料

由於您已在遊戲中新增幾個事件,應該就能回答有關遊戲使用者行為的問題。以下列出幾項可透過 Firebase 事件報表取得的洞察資料。

哪個層級的錯誤答案最多?

為回答這個問題,您需要瞭解各層級觸發的 level_wrong_answer 事件數量。

按一下事件報表中的 level_wrong_answer。在「level_wrong_answer」事件報表中,找出「level_name」資訊卡。資訊卡上會顯示與 level_name 參數相關聯的值,如下所示。

25da426bbc0c612c.png

根據上方螢幕截圖,您可以輕鬆判斷水平問題的答案最多,這代表使用者難以與其他等級相比。

這時您可以根據這份洞察資料,決定不將困難的層級用於獎勵使用者,並維持高留存率。

平均來說,我有多少次清除過某個關卡?

Awesome Drawing 測驗 中,使用者可以視需要提交每個關卡的答案。

由於您已在 level_success 事件中啟用 number_of_attempts 參數的參數報表,因此可查看該參數的詳細指標。

按一下事件報表中的 level_success 事件。在「level_success」事件報表中,找出「number_of_attemps」資訊卡。這張資訊卡顯示的平均嘗試次數如下:

43de290f9f1a0ac9.png

您可以根據這裡的深入分析資料,盡可能提高遊戲難度。舉例來說,如果平均嘗試次數太接近 1,不妨考慮讓遊戲變得更有挑戰性。

雖然他們無法淨個關卡,但還是希望收到提示來解決問題?

使用者決定略過某個關卡時,就會觸發 level_fail 事件。使用者做出決定的原因有很多,

不過,由於遊戲可以在觀看獎勵影片廣告後給予提示,因此請務必瞭解使用者是否嘗試運用提示消除關卡。

按一下事件報表中的 level_fail 事件。在「level_fail」事件報表中,找出「hint_used」資訊卡。您會看到平均 hint_used 個事件參數的數量。請注意,在未使用提示時,系統會將提示設為 1,但設為 0。

313814372cd7c8a4.png

如果 hint_used 資訊卡上的數字接近 0,表示獎勵 (提示) 對使用者的吸引力不大。您也將錯失提升獎勵影片廣告收益的大好良機。

因此,您應考慮獎勵對使用者更有用的體驗,這樣除了讓使用者更願意與遊戲互動,獎勵影片廣告帶來的收益也能有所提升。

每款遊戲平均清除了多少關卡?

「超棒繪圖測驗」每款遊戲總共有 6 個關卡。使用者完成六個關卡後 (無論每個關卡清除或失敗),都會以 number_of_correct_answers 做為參數觸發 game_complete 事件。

由於 number_of_correct_answers 表示使用者已清除多少層 (提供正確答案),因此您可以透過 number_of_correct_answers 參數的指標找出解答。

按一下事件報表中的「game_complete」事件。在 game_complete 事件報表中,找出「number_of_correct_answers」資訊卡。您會看到平均 number_of_correct_answers 個事件參數的數量。

d9eeaa019d1bceb4.png

如果清除關卡的平均數太低,建議您調整遊戲玩法來幫助玩家過關,這樣他們既不會失去興趣,也能繼續玩遊戲。

12. 全部完成!

您已完成 AdMob+Firebase 101 Unity 程式碼研究室。您可以在 android_studio_folder.png101-complete_and_102-base 資料夾中找到本程式碼研究室完成的程式碼。

在下一節的 AdMob + Firebase 程式碼研究室中,您將瞭解如何使用漏斗圖,以圖表呈現應用程式事件流程。此外,本文也會探討如何使用遠端設定和 A/B 測試,在不更新應用程式的情況下最佳化遊戲的參數值。