AdMob+Firebase 基础知识 Unity:设置和Google Analytics 基础知识

1. 简介

广告是应用整体用户体验中至关重要的一环。良好的广告植入方式有助于提升应用的整体体验,甚至还能提升用户留存率和互动度。例如,借助激励广告,您可以向观看视频广告的用户提供应用内代币或物品作为奖励,让用户达到新的高度,否则他们可能会卡住和流失。

不过,打造出色的广告体验并非易事。您可能会问:应该多久展示一次这些广告?应在何时何地展示广告?奖品应该是什么?遗憾的是,答案因应用和展示位置而异。没有放之四海而皆准的答案。

借助 Google Analytics for Firebase、AdMob 以及 Firebase 提供的其他多种强大而易用的工具,以数据为依据的方式微调您的应用将变得更加简单易行。今天,我们将向大家介绍如何入门!

构建内容

此 Codelab 是三个 Codelab 中的第一个,将引导您构建一款名为 Awesome Drawing Quiz 的应用,这款游戏可让玩家猜测图画的名称。该示例将演示如何将激励广告和 Firebase 服务整合到您的游戏中。

在此 Codelab 中,您将集成 Google Analytics for Firebase 以记录一些重要的应用事件。此外,您还将学习如何解读 Firebase 控制台中显示的应用分析数据。

学习内容

  • 如何在您的应用中设置 Google Analytics for Firebase
  • 如何记录应用事件
  • 如何解读 Firebase 控制台中显示的应用分析数据

所需条件

  • Unity 2018.4.4f1 或更高版本
  • Xcode 10 或更高版本(用于为 iOS 构建目标)
  • Google 账号
  • 一台搭载 Android 5.0 或更高版本且使用 USB 线连接您的设备的测试设备,或者运行 AVD(Android 虚拟设备)且系统映像支持 Play 商店/Google API 的 Android 模拟器
  • 一台运行 iOS 8.0 或更高版本的 iOS 设备或模拟器

您如何评价自己在 AdMob 方面的经验水平?

新手水平 中等水平 熟练水平

您如何评价自己在 Firebase 方面的经验水平?

<ph type="x-smartling-placeholder"></ph> 新手 中级 熟练

2. 设置开发环境

下载代码

点击以下按钮下载此 Codelab 的所有代码:

解压下载的 ZIP 文件。此操作将解压缩名为 admob-firebase-codelabs-unity-master 的根文件夹。

...或从命令行克隆 GitHub 代码库。

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

该代码库包含四个文件夹,如下所示:

  • android_studio_folder.png101-base - 您将在此 Codelab 中构建的起始代码。
  • android_studio_folder.png101-complete_and_102-base - 此 Codelab 完成后的代码以及是 102 Codelab 的起始代码。
  • android_studio_folder.png102-complete - 102 Codelab 完成后的代码。

准备所需文件

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

  1. 根据需要提供广告单元的名称。然后,将奖励数量设置为 1,将奖品设置为 "hint"(这些是应用当前向用户提供的奖励)。然后,点击创建广告单元,创建一个新的激励视频广告单元。

6d067814a2c38264

  1. 成功创建后,您会看到如下说明。

4bc1b3b341a5a81c

  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

  1. 根据需要提供广告单元的名称。然后,将奖励数量设置为 1,将奖品设置为 "hint"(这些是应用当前向用户提供的奖励)。然后,点击创建广告单元,创建一个新的激励视频广告单元。

6d067814a2c38264

  1. 成功创建后,您会看到如下说明。

4bc1b3b341a5a81c

  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 移动广告 Unity 插件 3.18.1 软件包。(请注意,此 Codelab 可能与该插件的其他版本不兼容)
  2. Awesome Drawing Quiz Unity 项目中。在项目中,转至 Assets >导入软件包 >自定义软件包
  3. GoogleMobileAds.unitypackage 导入到您下载的项目中。

配置 AdMob 应用 ID

在 Unity 编辑器中,依次选择 Assets >Google 移动广告 >设置

44fc84fe88235c1f

通过选中 Google AdMob 部分下的 Enabled 复选框启用 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. 在新项目的概览屏幕中,点击 Add Firebase to your Unity app
  2. 选中“注册为 iOS 应用”复选框。
  3. 按以下格式输入 iOS 软件包 ID:com.codelab.awesomedrawingquiz.unity
  4. 提供应用别名:Awesome Drawing Quiz (iOS 版 Unity)
  5. 选中“注册为 Android 应用”复选框。
  6. 按以下格式输入 Android 软件包名称:com.codelab.awesomedrawingquiz.unity
  7. 提供应用别名:Awesome Drawing Quiz (Android on Android)
  8. 选择注册应用以注册 Android 和 iOS 应用。

将 Firebase 配置文件添加到 Unity 项目

接下来,系统会提示您显示一个屏幕,您可以在其中下载包含应用所有必要 Firebase 元数据的配置文件。下载 google-service.jsonGoogleService-Info.plist 文件,然后将其移至 Unity 项目的 android_studio_folder.pngAssets 文件夹中。

331c165d80ba105e

添加 Firebase Analytics SDK

  1. 下载 Firebase Unity SDK 5.5.0 并将其解压缩到方便的位置。
  2. 打开 Awesome Drawing Quiz Unity 项目,依次转到 Assets >导入软件包 >自定义软件包
  3. 从解压缩后的 SDK 中,导入 Remote Config 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

“用户指标”卡片 (AdMob)

在“用户指标”卡片中,您可以了解广告体验的变化可能会对用户行为产生怎样的影响。

5f56366f1b31d4a1

激励广告报告 (AdMob)

激励广告报告提供了各种指标,可帮助发布商了解用户与其激励广告的互动情况。

658a2868777690ea

“总收入”卡片 (Firebase)

将 AdMob 应用与 Firebase 相关联后,Firebase 信息中心的“总收入”卡片将显示来自 AdMob 的收入,以及应用内购买和电子商务购买。

98cb283977b023a

广告事件报告 (Firebase)

系统会自动收集广告特有事件(点击事件、展示事件和奖励事件),并在 Google Analytics for Firebase 中使用。

bf77bd8c00c1441b.png

7. 运行项目

编译并运行项目后,您会在应用启动时看到以下屏幕。

f5fbf4565c5d8647.png

点击开始游戏后,您会在屏幕上看到一幅绘图。您的任务是使用顶部显示的提示猜测相应绘图的名称,根据提示,您可以推断出相应绘图的名称的第一个字母和长度。

bbdf4d23fb08a519.png ad82d7e657945c4d.png

如果您不知道此绘图的名称,可以点击“跳过”按钮跳过这一级别。

你可能还需要其他线索来帮助你猜出答案。点击“提示”按钮并观看激励视频广告,即可获取额外提示。看完广告后,我们会额外提供一封奖励信函。

8c33687361f83a13 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、through_time_sec、hint_used

level_fail

当用户跳过某一关时触发

level_name、number_of_attempts、through_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 类,请添加 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. 调试分析事件

您可以使用 DebugView 验证是否正确记录了事件。借助 DebugView,您可以近乎实时地查看开发设备上由您的应用记录的原始事件数据。

这对于在开发的插桩阶段进行验证非常有用,并有助于您发现分析实现中的错误。

在 Android 上启用调试模式

通常,应用中记录的事件会在大约 1 小时内进行分批处理,然后一起上传。要实时验证您的分析实现情况,您需要在开发设备上启用调试模式,以便以最低延迟上传事件。

首先,在 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 调试 Google Analytics 事件

在测试设备上启用“调试”模式后,前往 Firebase 控制台,然后从菜单中选择 DebugView。然后,在测试设备上玩游戏,即可看到 DebugView 报告中记录的事件并显示于 DebugView 报告中。

827059255d09ac00

您可以通过点击事件名称来访问有关每个事件的详细信息。例如,以下屏幕截图显示了与 level_start 事件关联的参数详细信息。

475db00d05d03ab8.png

如需了解详情,请参阅 DebugView 帮助中心文章

10. 启用参数报告

默认情况下,Google Analytics for Firebase 会收集事件总数,但您需要针对您感兴趣的每个事件参数明确启用自定义参数报告功能。启用此功能后,Google Analytics for Firebase 将显示更多卡片,以显示自定义参数的统计信息。

要为某个事件注册自定义参数,请执行以下操作:

  1. 转到 Firebase 控制台,然后选择您之前创建的 Awesome Drawing Quiz 项目。
  2. 点击导航菜单中的事件
  1. 在您要修改的事件对应的行中,点击 73afe611adf58774>修改参数报告。

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

完成参数报告设置后,您将能够查看与已启用参数报告的每个事件相关联的参数。

d1a37589d54bca6b.png

11. 通过事件报告获取数据洞见

您在游戏中添加了一些活动后,应该能够回答有关游戏用户行为的问题。以下是您可以从 Firebase 事件报告中获得的一些数据洞见。

哪个级别的错误答案最多?

要回答此问题,您应了解每个关卡触发的 level_wrong_answer 事件数。

点击事件报告中的 level_wrong_answer。在 level_wrong_answer 事件报告中,找到 level_name 卡片。您将在该卡片上看到与 level_name 参数关联的值,如下所示。

25da426bbc0c612c

根据上面的屏幕截图,您可以轻松发现 horizon 包含的错误答案数量最多,这意味着与其他关卡相比,用户难以辨别。

根据从这里得到的分析数据,您可以决定不为初级用户提供高难度级别,以保持较高的留存率。

平均有多少次尝试通过关卡?

Awesome Drawing Quiz 中,用户可以随意提交各个级别的答案。

由于您在 level_success 事件中针对 number_of_attempts 参数启用了参数报告,因此可以查看该参数的详细指标。

点击事件报告中的 level_success 事件。在 level_success 事件报告中,找到 number_of_attemps 卡片。在该卡片上看到的平均尝试次数,如下所示:

43de290f9f1a0ac9

您可以根据此处的分析数据来优化游戏的平均难度。例如,如果平均尝试次数太接近 1 次,您可以考虑让游戏更具挑战性。

用户是否尝试过通过提示来解决问题,即使他们最终未能通过一个关卡?

当用户决定跳过某一关时,就会触发 level_fail 事件。导致用户做出决定的原因可能有很多。

不过,由于游戏可以在用户观看激励视频广告后给予提示,因此请务必了解用户是否至少尝试在提示的帮助下通关。

点击事件报告中的 level_fail 事件。在 level_fail 事件报告中,找到 hint_used 卡片。您将看到 hint_used 个事件参数的平均数量。请注意,使用提示时,它会设置为 1,而在未使用提示时则设置为 0。

313814372cd7c8a4

如果 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 基础知识”Unity Codelab。您可以在 android_studio_folder.png101-complete_and_102-base 文件夹中找到此 Codelab 的完整代码。

在 AdMob+Firebase Codelab 的下一部分,您将学习如何使用漏斗来直观呈现应用事件流。此外,您还将介绍如何使用 Remote Config 和 A/B Testing,在不更新应用的情况下优化游戏中的参数值。