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 模擬器,以及支援 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」做為平台,然後按一下「新增」

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

  1. 在 AdMob 前端按一下「應用程式」選單,然後從應用程式清單中選取「Awesome Drawing Quiz」
  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 前端按一下「應用程式」選單,然後從應用程式清單中選取「Awesome Drawing Quiz」
  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 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

5. 設定 Firebase 專案

透過 Firebase 控制台建立新專案

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

新增 Unity 應用程式

  1. 在新專案的總覽畫面中,按一下「將 Firebase 新增至您的 Unity 應用程式」
  2. 勾選「註冊為 iOS 應用程式」核取方塊。
  3. 輸入 iOS 軟體包 ID,格式如下:com.codelab.awesomedrawingquiz.unity
  4. 提供應用程式暱稱,例如:Awesome Drawing Quiz (Unity on iOS)
  5. 勾選「註冊為 Android 應用程式」核取方塊。
  6. 輸入 Android 套件名稱:com.codelab.awesomedrawingquiz.unity
  7. 提供應用程式暱稱,例如:Awesome Drawing Quiz (Unity on Android)
  8. 選取「註冊應用程式」,註冊 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」>「Import Package」>「Custom Package」
  3. 從解壓縮的 SDK 匯入遠端設定 SDK (dotnet4/FirebaseAnalytics.unitypackage)。
  4. 在「Import Unity package」視窗中,按一下「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」(略過) 按鈕跳過關卡。

你可能需要額外提示來猜出答案。點選「提示」按鈕並觀看獎勵影片廣告,即可獲得額外提示。看完廣告後,系統會揭露一個額外字母做為獎勵。

8c33687361f83a13.png b048d6587c10e9df.png

8. 新增應用程式事件

如要深入瞭解「Awesome Drawing Quiz」中的使用者歷程,請定義幾個自訂事件,追蹤使用者在遊戲中的行為,如下所示:

事件名稱

已觸發...

參數

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。接著,在 Analytics 資料夾下建立新的 C# 指令碼,並命名為 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 檔案。如要使用 QuizAnalytics 類別 (位於 AwesomeDrawingQuiz.Analytics 命名空間下方),請新增 using 指示,如下所示。

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. 偵錯 Analytics 事件

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

這項工具在開發階段的插碼程序中非常實用,可協助您找出 Analytics 導入作業中的錯誤。

在 Android 裝置上啟用偵錯模式

一般來說,應用程式記錄的事件會在大約一小時內分批上傳。如要即時驗證 Analytics 導入作業,請在開發裝置上啟用偵錯模式,以盡量減少延遲時間的方式上傳事件。

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

c8dc1b4f08a224b8.png

然後執行下列指令 (請確認測試 Android 裝置已連上電腦,或 Android 模擬器正在執行):

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 Quiz」中,使用者可以盡情提交各個等級的答案。

由於您已在 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,表示獎勵 (提示) 對使用者不夠吸引人。此外,您也錯失了透過獎勵影片廣告增加收益的機會。

因此,建議您提供對使用者更有幫助的獎勵,讓使用者更深入參與遊戲,並提高獎勵影片廣告的收益。

每場遊戲平均通過多少關卡?

在「Awesome Drawing Quiz」中,每款遊戲共有 6 個關卡。使用者完成六個關卡後 (不論是否過關),系統會觸發 game_complete 事件,並將 number_of_correct_answers 做為參數。

由於 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 測試,在不更新應用程式的情況下,最佳化遊戲中的參數值。