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

1. 简介

广告是应用整体用户体验的重要组成部分。良好的广告实现有助于提升应用的整体体验,甚至提高用户留存率和互动度。例如,通过激励广告,您可以向观看视频广告的用户奖励应用内货币或商品,这样用户就可以达到新的高度,而不会像以前那样卡在某个地方,最终流失。

不过,打造出色的广告体验并非易事。您可能想知道:这些广告的展示频率应为多少?您应该在哪些位置和时间展示这些广告?奖品应该是什么?遗憾的是,答案因应用和展示位置而异。没有一种答案能够适用于所有情况。

借助 Google Analytics for Firebase、AdMob 以及 Firebase 提供的其他几款功能强大且易于使用的工具,您可以更轻松、更顺畅地以数据驱动的方式对应用进行微调。今天,我们将向您展示如何开始使用!

构建内容

我们提供了 3 个 Codelab 来引导您构建一款名为 Awesome Drawing Quiz 的应用,这是其中的第 1 个。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 虚拟设备)的 Android 模拟器,且该模拟器具有支持 Play 商店/Google API 的系统映像
  • 搭载 iOS 8.0 或更高版本的 iOS 设备或模拟器

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

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

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

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

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 完成后的代码。

准备所需文件

超棒的绘画测验使用多个开源代码,这些代码是编译和运行项目所必需的。

打开终端,然后移动到代码库根目录。然后,从终端运行 ./gradlew :prepareThirdPartyFiles(在 Windows 上为 gradlew.bat :prepareThirdPartyFiles),将所需文件复制到项目中。

导入起始应用

启动 Unity,然后在欢迎界面中选择“打开”。然后,从下载的代码中选择 101-base 目录。

现在,您应该已在 Unity 中打开项目。

3. 设置激励视频广告单元(可选)

为方便起见,起始应用已包含一个专用的激励视频广告单元。如果您不想在 AdMob 账号下创建新的 Google Ads 账号,则可以完全跳过此步骤

针对 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 常量更新为您在上一步中创建的 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 常量更新为您在上一步中创建的 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 > Import Package > Custom Package
  3. 将下载的 GoogleMobileAds.unitypackage 导入到项目中。

配置 AdMob 应用 ID

在 Unity 编辑器中,从菜单中依次选择 Assets > Google Mobile Ads > Settings

44fc84fe88235c1f.png

启用 AdMob,方法是选中 Google AdMob 部分下的 Enabled 复选框。然后,按如下方式输入 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 中,导入 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.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

如果您不知道绘画的名称,可以点击跳过按钮跳过此关卡。

您可能需要额外的提示来帮助您猜出答案。您可以点击提示按钮并观看激励视频广告,以获取额外线索。看完广告后,您将获得一个额外字母作为奖励。

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。然后在 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 文件。如需使用位于 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,您能够以近乎实时的方式查看由开发设备上的应用记录的原始事件数据。

这在开发的插桩阶段进行验证时很有用,可帮助您发现 Analytics 实现中的错误。

在 Android 上启用调试模式

通常,您的应用所记录的事件会每隔 1 小时左右集中起来作为一批进行处理,并一起上传。如需实时验证您的 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 设备上启用调试模式

如需在开发设备上启用 Google 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

根据上面的屏幕截图,您可以轻松发现地平线的答错次数最多,这意味着与其他关卡相比,该关卡对用户来说难度更大。

根据此处提供的分析洞见,您可以决定不向新手用户提供难度较高的关卡,以保持较高的用户留存率。

平均尝试多少次才能通关?

超棒的绘画测验中,用户可以根据需要多次提交每个级别的答案。

由于您已针对 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 Codelab。您可以在 android_studio_folder.png101-complete_and_102-base 文件夹中找到此 Codelab 的完整代码。

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