AdMob+Firebase 入门指南 Android:设置和Google Analytics 基础知识

1. 简介

广告是应用整体用户体验中至关重要的一环。良好的广告植入方式有助于提升应用的整体体验,甚至还能提升用户留存率和互动度。例如,通过激励广告,您可以向用户提供应用内游戏代币或道具,方便观看视频广告的用户观看,让用户在观看时可能会卡住或流失并达到新的高度。

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

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

构建内容

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

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

如果在此 Codelab 操作期间遇到任何问题(代码错误、语法错误、措辞含义不明等),都可以通过 Codelab 左下角的报告错误链接报告相应问题。

学习内容

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

所需条件

  • Android Studio 4.1 及更高版本
  • Google 账号
  • 一台搭载 Android 5.0 或更高版本且使用 USB 线连接您的设备的测试设备,或者运行 AVD(Android 虚拟设备)且系统映像支持 Play 商店/Google API 的 Android 模拟器

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

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

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

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

2. 设置开发环境

下载代码

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

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

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

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

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

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

导入入门版应用

启动 Android Studio,然后在欢迎屏幕上选择 Import project。然后,从您下载的代码中选择 101-base 目录。

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

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

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

要在您的账号中创建新的 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. 成功创建后,您会看到类似于以下内容的说明:ff872a005a07b75e.png
  2. 返回 Android 项目,将 AdMob 应用 ID 和广告单元 ID 常量更新为您在上一步中创建的常量。

strings.xml

<!-- Update the value with your AdMob app id -->
<string name="admob_app_id">YOUR_ADMOB_APP_ID</string>

GameActivity.kt

// Update the value with your Rewarded Video ad unit id
private const val AD_UNIT_ID = "<YOUR_AD_UNIT_ID>";

4. 设置 Firebase 项目

通过 Firebase 控制台创建一个新项目

  1. 前往 Firebase 控制台
  2. 选择添加项目,然后将您的项目命名为 "Awesome Drawing Quiz"。确保为此项目启用 Google Analytics 单选按钮处于选中状态。
  3. 选择您计划使用的 Google Analytics 账号。在大多数情况下,选择 Firebase 的默认账号选项应该已足够,但如果您有希望使用的其他 Google Analytics 账号,请在此处选择该选项。
  4. 点击创建项目

添加 Android 应用

  1. 在新项目的概览屏幕中,点击将 Firebase 添加到您的 Android 应用
  2. 输入此 Codelab 的软件包名称:com.codelab.awesomedrawingquiz
  3. 为您的应用设置别名:Awesome Drawing Quiz
  4. 请将 SHA-1 字段留空,因为此项目不需要 SHA-1。
  5. 选择注册应用以注册您的应用。

将 google-services.json 文件添加到您的应用中

接下来,系统会提示您显示一个屏幕,您可以在其中下载包含应用所有必要 Firebase 元数据的配置文件。点击下载 google-service.json,然后将该文件复制到项目的 android_studio_folder.pngapp 目录中。

32419a0fa25a1405

声明依赖项版本

首先,添加在项目中集成 Firebase 所需的每个依赖项的版本。打开位于项目根目录下的 dependencies.gradle 文件,然后添加 Google 服务插件、Firebase Analytics SDK 和 Firebase Core SDK 版本。

dependencies.gradle

ext {
    ...

    // TODO: Declare google-services plugin version (101)
    googleServicesPluginVersion = '4.3.4'

    ...

    // TODO: Declare Firebase BOM version (101)                                                                                                                                                                                                   
    firebaseBomVersion = '26.2.0'

    ...
}

将 google-services 插件应用到您的应用

google-services 插件使用 google-services.json 文件将您的应用配置为使用 Firebase。

在位于项目根目录的 build.gradle 文件中,将 google-services 添加为类路径。

build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ...
    
    dependencies {
        classpath "com.android.tools.build:gradle:$androidPluginVersion"

        // TODO: Add google-services plugin (101)
        classpath "com.google.gms:google-services:$googleServicesPluginVersion"

        ...
    }
}

...

然后,在 app/build.gradle 文件中添加一行代码,以应用 google-services 插件,如下所示:

app/build.gradle

apply plugin: 'com.android.application'

// TODO: Apply google-services plugin (101)
apply plugin: 'com.google.gms.google-services'

android {
    ...
}

dependencies {
    ...
}

Firebase SDK 添加到项目

还是在 app/build.gradle 文件中,将 Analytics SDK 添加到应用依赖项中。

app/build.gradle

apply plugin: 'com.android.application'

android {
    ...
}

dependencies {
    ...

    // TODO: Import the Firebase BoM (101)
    implementation platform("com.google.firebase:firebase-bom:$firebaseBomVersion")

    // COMPLETE: Add Firebase Analytics dependency (101)
    implementation 'com.google.firebase:firebase-analytics-ktx'

    ...
}

...

将项目与 Gradle 文件同步

为确保所有依赖项都对您的应用可用,请将项目与 Gradle 文件同步。选择文件 >Sync Project with Gradle Files 菜单以将您的项目与 Gradle 文件同步。

5. 将 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

6. 运行项目

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

15f1d8041988974c

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

8e87e96256d6874a 9c4a0143c3234cb2

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

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

edcf6f0d833ea4ea.png 47ab9a07b1c71711

7. 添加应用事件

为了深入了解 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

游戏中通关的关卡数

创建用于记录自定义事件的辅助类

为了轻松记录分析事件,您需要创建一个辅助类来管理自定义事件。

首先,创建一个新的 Kotlin 文件(不是 Kotlin 类),并在 com.codelab.awesomedrawingquiz 软件包下将其命名为 QuizAnalytics.kt。创建用于定义自定义事件名称及其参数的字段。

QuizAnalytics.kt

private const val EVENT_AD_REWARD_PROMPT = "ad_reward_prompt"

private const val EVENT_AD_REWARD_IMPRESSION = "ad_reward_impression"

private const val EVENT_LEVEL_FAIL = "level_fail"

private const val EVENT_LEVEL_SUCCESS = "level_success"

private const val EVENT_LEVEL_WRONG_ANSWER = "level_wrong_answer"

private const val EVENT_GAME_START = "game_start"

private const val EVENT_GAME_COMPLETE = "game_complete"

private const val PARAM_AD_UNIT_ID = "ad_unit_id"

private const val PARAM_ELAPSED_TIME_SEC = "elapsed_time_sec"

private const val PARAM_HINT_USED = "hint_used"

private const val PARAM_NUMBER_OF_ATTEMPTS = "number_of_attempts"

private const val PARAM_NUMBER_OF_CORRECT_ANSWERS = "number_of_correct_answers"

接下来,添加可帮助您记录游戏中自定义事件的扩展函数。请注意,大多数自定义事件都包含参数,以便您了解每个事件的更多背景信息。另请注意,Google Analytics 已经定义了几个事件名称和参数(FirebaseAnalytics.Event.LEVEL_NAMEFirebaseAnalytics.Event.LEVEL_START),因此我们将使用它们。

QuizAnalytics.kt

...

fun FirebaseAnalytics.logGameStart() = logEvent(EVENT_GAME_START, null)

fun FirebaseAnalytics.logLevelStart(levelName: String) {
    logEvent(FirebaseAnalytics.Event.LEVEL_START) {
        param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
    }
}

fun FirebaseAnalytics.logLevelWrongAnswer(levelName: String) {
    logEvent(EVENT_LEVEL_WRONG_ANSWER) {
        param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
    }
}

fun FirebaseAnalytics.logAdRewardPrompt(adUnitId: String) {
    logEvent(EVENT_AD_REWARD_PROMPT) {
        param(PARAM_AD_UNIT_ID, adUnitId)
    }
}

fun FirebaseAnalytics.logAdRewardImpression(adUnitId: String) {
    logEvent(EVENT_AD_REWARD_IMPRESSION) {
        param(PARAM_AD_UNIT_ID, adUnitId)
    }
}

fun FirebaseAnalytics.logLevelSuccess(
    levelName: String,
    numberOfAttempts: Int,
    elapsedTimeSec: Int,
    hintUsed: Boolean
) {
    logEvent(EVENT_LEVEL_SUCCESS) {
        param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
        param(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttempts.toLong())
        param(PARAM_ELAPSED_TIME_SEC, elapsedTimeSec.toLong())
        param(PARAM_HINT_USED, if (hintUsed) 1 else 0)
    }
}

fun FirebaseAnalytics.logLevelFail(
    levelName: String,
    numberOfAttempts: Int,
    elapsedTimeSec: Int,
    hintUsed: Boolean
) {
    logEvent(EVENT_LEVEL_FAIL) {
        param(FirebaseAnalytics.Param.LEVEL_NAME, levelName)
        param(PARAM_NUMBER_OF_ATTEMPTS, numberOfAttempts.toLong())
        param(PARAM_ELAPSED_TIME_SEC, elapsedTimeSec.toLong())
        param(PARAM_HINT_USED, if (hintUsed) 1 else 0)
    }
}

fun FirebaseAnalytics.logGameComplete(
    numberOfCorrectAnswers: Int
) {
    logEvent(EVENT_GAME_COMPLETE) {
        param(PARAM_NUMBER_OF_CORRECT_ANSWERS, numberOfCorrectAnswers.toLong())
    }
}

在游戏中记录分析事件

GameViewModel 类中,为 FirebaseAnalytics 实例添加一个新属性。

GameViewModel.kt

class GameViewModel(
    ...
    // TODO: Accept FirebaseAnalytics instance as a parameter (101)
    private val analytics: FirebaseAnalytics,
) : ViewModel() {
   ...
}

接下来,在 AwesomeDrawingQuizViewModelFactory 类中添加一个新属性,就像之前在 GameViewModel 中执行的操作一样。

AwesomeDrawingQuizViewModelFactory.kt

class AwesomeDrawingQuizViewModelFactory(
    ...
    // TODO: Accept FirebaseAnalytics instance as a parameter (101)
    private val analytics: FirebaseAnalytics,
) : ViewModelProvider.Factory {
    ...
}

接下来,在 AwesomeDrawingQuiz 类中添加 provideFirebaseAnalytics() 函数并更新 provideViewModelFactory() 函数,以将 FirebaseAnalytics 实例传递给 AwesomeDrawingViewModelFactory

AwesomeDrawingQuiz.kt

class AwesomeDrawingQuiz : Application() {

    ...

    fun provideViewModelFactory() = AwesomeDrawingQuizViewModelFactory(
        this,
        provideGameSettings(),
        // TODO: Pass FirebaseAnalytics instance as a parameter (101)
        provideFirebaseAnalytics(),
    )

    // TODO: Provide FirebaseAnalytics instance (101)
    private fun provideFirebaseAnalytics() = Firebase.analytics

    ...

}

现在,您可以实现自定义事件了。首先,在 startGame() 函数中,调用 logGameStart() 以指示游戏已开始。

由于 logGameStart()FirebaseAnalytics 类的扩展函数,因此您可以从 FirebaseAnalytics 类的实例调用它。

GameViewModel.kt

fun startGame() {
    ...

    // TODO: Log game_start event (101)
    analytics.logGameStart()

    ...
}

接下来,在 checkAnswer() 函数中添加 level_successlevel_wrong_answer 事件。

GameViewModel.kt

fun checkAnswer(userAnswer: String) {
    ...
    if (correct) {
        ...

        // TODO: Log level_success event (101)
        analytics.logLevelSuccess(
            levelName = drawing.word,
            numberOfAttempts = numAttempts,
            elapsedTimeSec = elapsedTimeInSeconds,
            hintUsed = isHintUsed,
        )

        ...
    } else {
        // TODO: Log level_wrong_answer event (101)
        analytics.logLevelWrongAnswer(levelName = drawing.word)

        ...
    }
}

接下来,在 skipLevel() 函数中添加 level_fail 事件,以将关卡标记为未通过。

GameViewModel.kt

fun skipLevel() {
   ...

    // TODO: Log level_fail event (101)
    analytics.logLevelFail(
        levelName = drawing.word,
        numberOfAttempts = numAttempts,
        elapsedTimeSec = elapsedTimeInSeconds,
        hintUsed = isHintUsed,
    )

    ...
}

接下来,实现 logAdRewardPrompt()logAdRewardImpression() 函数以跟踪用户在激励视频广告方面的行为。

GameViewModel.kt

fun logAdRewardPrompt(adUnitId: String) {
    // TODO: Log ad_reward_prompt event (101)
    analytics.logAdRewardPrompt(adUnitId)
}

fun logAdRewardImpression(adUnitId: String) {
    // TODO: Log ad_reward_impression event (101)
    analytics.logAdRewardImpression(adUnitId)
}

最后,修改 requestNewDrawing()finishGame() 函数,添加 level_start 和 game_complete 自定义事件。

GameViewModel.kt

private fun requestNewDrawing() {
    ...

    drawingRequestDisposable = drawingDao.getRandomDrawings(seenWords)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe { d ->
            ...

            // TODO: Log level_start event (101)
            analytics.logLevelStart(d.word)

            ...
        }
}

private fun finishGame() {
    // TODO: Log game_complete event (101)
    analytics.logGameComplete(numCorrectAnswers)

    ...
}

8. 调试分析事件

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

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

启用调试模式

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

如需启用调试模式,请完成以下步骤:

  1. 在 Android Studio 中打开 Terminal 工具窗口 (View > Tool Windows > Terminal)。

c8dc1b4f08a224b8.png

  1. 执行以下命令(确保测试 Android 设备已连接到您的计算机或 Android 模拟器正在运行):
adb shell setprop debug.firebase.analytics.app com.codelab.awesomedrawingquiz

“调试”模式将保持启用状态,直至您通过执行以下命令明确停用“调试”模式:

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

使用 DebugView 调试 Google Analytics 事件

在测试设备上启用“调试”模式后,在 Firebase 控制台中转到您的项目,然后选择 Analytics>DebugView。然后,在测试设备上玩游戏,即可看到 DebugView 报告中记录的事件并显示于 DebugView 报告中。

827059255d09ac00

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

475db00d05d03ab8.png

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

9. 启用自定义维度和指标

默认情况下,Google Analytics for Firebase 会收集事件总数。对于您感兴趣的每个事件参数,您需要明确为该参数启用报告功能。然后,Google Analytics for Firebase 可以显示其他卡片,以显示自定义参数的统计信息。

要注册自定义维度和指标,请按以下步骤操作:

  1. 转到 Firebase 控制台,然后选择您之前创建的 Awesome Drawing Quiz 项目。
  2. 点击分析工具 >事件
  1. 点击管理自定义定义
  2. 在“自定义维度”标签页中,点击创建自定义维度
  3. 在“事件参数名称”字段中,输入 level_name,然后点击保存以完成参数注册。

3d20ee9d7de74e9b

  1. 接下来,选择自定义指标标签页,然后点击创建自定义指标
  2. 请为以下参数输入参数名称和度量单位。

参数名称

参数类型

衡量单位

number_of_attempts

数字

标准

hint_used

数字

标准

elapsed_time_sec

数字

number_of_correct_answers

数字

标准

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

您在游戏中添加了一些活动后,应该能够回答有关游戏用户行为的问题。以下是您可以从 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 个关卡,当用户完成 6 个关卡(无论通过还是未通过每个关卡)后,系统就会触发 game_complete 事件,并以 number_of_correct_answers 为参数。number_of_correct_answers 参数表示用户提供正确答案的关卡数量。

点击事件报告中的 game_complete 事件。在 game_complete 事件报告中,找到 number_of_correct_answers 卡片。您将看到 number_of_correct_answers 个事件参数的平均数量。

d9eeaa019d1bceb4.png

如果通关的平均数量太少,您应该考虑重新排列游戏中的关卡,以帮助玩家更轻松地通过较早的关卡,以便他们可以继续玩您的游戏,而不会失去兴趣。

11. 全部完成!

您已完成 AdMob+Firebase 基础知识 Android Codelab。您可以在 android_studio_folder.png101-complete_and_102-base 文件夹中找到此 Codelab 的完整代码。

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