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">2. 设置开发环境
下载代码
点击以下按钮下载此 Codelab 的所有代码:
解压下载的 ZIP 文件。此操作将解压缩名为 admob-firebase-codelabs-android
的根文件夹。
...或从命令行克隆 GitHub 代码库。
$ git clone https://github.com/googlecodelabs/admob-firebase-codelabs-android
该代码库包含四个文件夹,如下所示:
- 101-base - 您将在此 Codelab 中构建的起始代码。
- 101-complete_and_102-base - 此 Codelab 完成后的代码以及是 102 Codelab 的起始代码。
- 102-complete - 102 Codelab 完成后的代码。
导入入门版应用
启动 Android Studio,然后在欢迎屏幕上选择 Import project。然后,从您下载的代码中选择 101-base 目录。
现在,您应该已在 Android Studio 中打开该项目。
3. 设置激励视频广告单元(可选)
为方便起见,起始应用已包含专用的激励视频广告单元。如果不想在 AdMob 账号中创建新的账号,您完全可以跳过此步骤。
要在您的账号中创建新的 AdMob 应用,请按以下说明操作:
- 进入 AdMob 控制台。
- 在应用菜单中,点击添加应用。
- 当系统询问“您是否已将应用发布到 Google Play 或 App Store”时,回答“否”。
- 将应用命名为 Awesome Drawing Quiz选择“Android”作为平台,然后点击“添加”。
在您的账号中创建 AdMob 应用后,请按照下文所述步骤创建新的激励视频广告单元。
- 点击 AdMob 前端中的应用菜单,然后从应用列表中选择“Awesome Drawing Quiz”。
- 点击添加广告单元,创建一个新的激励视频广告单元。
- 选择激励广告作为广告格式。
- 根据需要提供广告单元的名称。然后,将奖励数量设置为 1,将奖品设置为 "hint"(这是应用当前向用户提供的奖励)。点击创建广告单元,创建一个新的激励视频广告单元。
- 成功创建后,您会看到类似于以下内容的说明:
- 返回 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 控制台创建一个新项目
- 前往 Firebase 控制台。
- 选择添加项目,然后将您的项目命名为 "Awesome Drawing Quiz"。确保为此项目启用 Google Analytics 单选按钮处于选中状态。
- 选择您计划使用的 Google Analytics 账号。在大多数情况下,选择 Firebase 的默认账号选项应该已足够,但如果您有希望使用的其他 Google Analytics 账号,请在此处选择该选项。
- 点击创建项目。
添加 Android 应用
- 在新项目的概览屏幕中,点击将 Firebase 添加到您的 Android 应用。
- 输入此 Codelab 的软件包名称:com.codelab.awesomedrawingquiz
- 为您的应用设置别名:Awesome Drawing Quiz
- 请将 SHA-1 字段留空,因为此项目不需要 SHA-1。
- 选择注册应用以注册您的应用。
将 google-services.json 文件添加到您的应用中
接下来,系统会提示您显示一个屏幕,您可以在其中下载包含应用所有必要 Firebase 元数据的配置文件。点击下载 google-service.json,然后将该文件复制到项目的 app 目录中。
声明依赖项版本
首先,添加在项目中集成 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 相关联,请完成以下步骤。
- 访问 https://apps.admob.com,登录您的 AdMob 账号。
- 在边栏中点击“应用”。
- 选择“Awesome Drawing Quiz”。如果您没有在最近使用的应用列表中看到该应用,请点击查看所有应用,以搜索您添加到 AdMob 的所有应用的列表。
- 在边栏中点击应用设置。
- 点击与 Firebase 关联。
- 选择“关联到现有 Firebase 项目并创建新的 Firebase 应用”选项。然后从下拉菜单中选择 Awesome Drawing Quiz 项目。
- 点击继续按钮后,您会看到已成功关联消息。点击完成按钮完成。
将 AdMob 应用关联到 Firebase 项目后,即可在 AdMob 和 Firebase 控制台中解锁一些其他功能,如下所示:
收入卡片 (AdMob)
在“收入”卡片中,您可以在一个位置全面了解所有可能的收入来源。支持的收入来源如下:
- AdMob(估算值)
- 参与中介的广告联盟(监测)
- 应用内购买
- 电子商务购买
“用户指标”卡片 (AdMob)
在“用户指标”卡片中,您可以了解广告体验的变化可能会对用户行为产生怎样的影响。
激励广告报告 (AdMob)
激励广告报告提供了各种指标,可帮助发布商了解用户与其激励广告的互动情况。
“总收入”卡片 (Firebase)
将 AdMob 应用与 Firebase 相关联后,Firebase 信息中心的“总收入”卡片将显示来自 AdMob 的收入,以及应用内购买和电子商务购买。
广告事件报告 (Firebase)
系统会自动收集广告特有事件(点击事件、展示事件和奖励事件),并在 Google Analytics for Firebase 中使用。
6. 运行项目
编译并运行项目后,您会在应用启动时看到以下屏幕。
点击开始游戏后,您会在屏幕上看到一幅绘图。您的任务是使用顶部显示的提示猜测相应绘图的名称,根据提示,您可以推断出相应绘图的名称的第一个字母和长度。
如果您不知道此绘图的名称,可以点击“跳过”按钮跳过这一级别。
你可能还需要其他线索来帮助你猜出答案。点击“提示”按钮并观看激励视频广告,即可获取额外提示。看完广告后,我们会额外提供一封奖励信函。
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_NAME
和 FirebaseAnalytics.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_success
和 level_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 小时内进行分批处理,然后一起上传。要实时验证您的分析实现情况,您需要在开发设备上启用调试模式,以便以最低延迟上传事件。
如需启用调试模式,请完成以下步骤:
- 在 Android Studio 中打开 Terminal 工具窗口 (View > Tool Windows > Terminal)。
- 执行以下命令(确保测试 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 报告中。
您可以通过点击事件名称来访问有关每个事件的详细信息。例如,以下屏幕截图显示了与 level_start
事件关联的参数详细信息。
如需了解详情,请参阅 DebugView 帮助中心文章。
9. 启用自定义维度和指标
默认情况下,Google Analytics for Firebase 会收集事件总数。对于您感兴趣的每个事件参数,您需要明确为该参数启用报告功能。然后,Google Analytics for Firebase 可以显示其他卡片,以显示自定义参数的统计信息。
要注册自定义维度和指标,请按以下步骤操作:
- 转到 Firebase 控制台,然后选择您之前创建的 Awesome Drawing Quiz 项目。
- 点击分析工具 >事件。
- 点击管理自定义定义。
- 在“自定义维度”标签页中,点击创建自定义维度。
- 在“事件参数名称”字段中,输入 level_name,然后点击保存以完成参数注册。
- 接下来,选择自定义指标标签页,然后点击创建自定义指标。
- 请为以下参数输入参数名称和度量单位。
参数名称 | 参数类型 | 衡量单位 |
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
参数关联的值,如下所示。
根据上面的屏幕截图,您可以轻松发现 horizon 包含的错误答案数量最多,这意味着与其他关卡相比,用户难以辨别。
根据从这里得到的分析数据,您可以决定不为初级用户提供高难度级别,以保持较高的留存率。
平均有多少次尝试通过关卡?
在 Awesome Drawing Quiz 中,用户可以随意提交各个级别的答案。
由于您在 level_success
事件中针对 number_of_attempts
参数启用了参数报告,因此可以查看该参数的详细指标。
点击事件报告中的 level_success
事件。在 level_success
事件报告中,找到 number_of_attemps
卡片。在该卡片上看到的平均尝试次数,如下所示:
您可以根据此处的分析数据来优化游戏的平均难度。例如,如果平均尝试次数太接近 1 次,您可以考虑让游戏更具挑战性。
用户是否尝试过通过提示来解决问题,即使他们最终未能通过一个关卡?
当用户决定跳过某一关时,就会触发 level_fail
事件。导致用户做出决定的原因可能有很多。
不过,由于游戏可以在用户观看激励视频广告后给予提示,因此有必要了解用户是否尝试借助提示过关。
点击事件报告中的 level_fail
事件。在 level_fail
事件报告中,找到 hint_used
卡片。您将看到 hint_used
个事件参数的平均数量。请注意,如果使用了提示,则该参数的值为 1;如果未使用提示,则值为 0。
如果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
个事件参数的平均数量。
如果通关的平均数量太少,您应该考虑重新排列游戏中的关卡,以帮助玩家更轻松地通过较早的关卡,以便他们可以继续玩您的游戏,而不会失去兴趣。
11. 全部完成!
您已完成 AdMob+Firebase 基础知识 Android Codelab。您可以在 101-complete_and_102-base 文件夹中找到此 Codelab 的完整代码。
在 AdMob+Firebase Codelab 的下一部分,您将学习如何使用漏斗来直观呈现应用事件流。下一部分还将介绍如何使用 Remote Config 和 A/B Testing 优化游戏中的参数值,而无需更新应用。