1. 簡介
廣告是應用程式整體使用者體驗的重要一環。妥善導入廣告有助於提升整體應用程式體驗,甚至提高使用者留存率和參與度。舉例來說,獎勵廣告可讓您提供應用程式內貨幣或商品,獎勵觀看影片廣告的使用者,協助他們突破瓶頸,避免流失。
不過,要打造優質廣告體驗並不容易。您可能會想知道:這些廣告的顯示頻率應為多少?您應該在何時何地顯示這些廣告?獎勵應為何?很抱歉,答案會因應用程式和刊登位置而異。沒有一體適用的答案。
有了 Google Analytics for Firebase、AdMob,以及 Firebase 提供的其他幾項強大且易於使用的工具,您現在可以更輕鬆地根據資料微調應用程式,並簡化相關程序。今天,我們將說明如何開始使用!
建構項目
本程式碼研究室是三部系列的第一部,將引導您建構名為「Awesome Drawing Quiz」的應用程式。這款遊戲可讓玩家猜測繪圖名稱。並示範如何在遊戲中加入獎勵廣告和 Firebase 服務。
在本程式碼研究室中,您將整合 Google Analytics for Firebase,記錄一些重要的應用程式事件。此外,您也會瞭解如何解讀 Firebase 控制台中顯示的應用程式數據分析。
|
|
進行本程式碼研究室時,如果你遇到任何問題 (例如程式碼錯誤、文法錯誤或用詞不明確等),請透過程式碼研究室左下角的「回報錯誤」連結回報問題。
課程內容
- 如何在應用程式中設定 Google Analytics for Firebase
- 如何記錄應用程式事件
- 如何解讀 Firebase 控制台中顯示的應用程式數據分析
軟硬體需求
- Android Studio 4.1 以上版本
- Google 帳戶
- 搭載 Android 5.0 以上版本的測試裝置,以及用來連接裝置的 USB 傳輸線;或是執行 AVD (Android 虛擬裝置) 的 Android 模擬器,以及支援 Play 商店/Google API 的系統映像檔
您對 AdMob 的使用經驗程度為何?
您對 Firebase 的經驗程度如何?
2. 設定開發環境
下載程式碼
點選下方按鈕即可下載這個程式碼研究室的所有程式碼:
將下載的 ZIP 檔案解壓縮。這會解壓縮名為「admob-firebase-codelabs-android」的根資料夾。
...或從指令列複製 GitHub 存放區。
$ git clone https://github.com/googlecodelabs/admob-firebase-codelabs-android
存放區包含下列四個資料夾:
101-base:您將在本程式碼研究室中建構的起始程式碼。
101-complete_and_102-base:本程式碼研究室的完成程式碼,以及 102 程式碼研究室的範例程式碼。
102-complete:102 程式碼研究室的完成程式碼。
匯入範例應用程式
啟動 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,獎勵項目設為「提示」 (這是應用程式目前提供給使用者的獎勵)。按一下「建立廣告單元」,建立新的獎勵影片廣告單元。

- 成功建立後,您會看到類似以下的說明:

- 返回 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 中繼資料。按一下「Download google-service.json」,然後將檔案複製到專案的
app 目錄。

宣告依附元件版本
首先,請新增專案中整合 Firebase 時所需的各項依附元件版本。開啟專案根目錄中的 dependencies.gradle 檔案,然後新增 google-services 外掛程式、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 檔案同步處理。選取「File」>「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. 執行專案
編譯及執行專案後,應用程式啟動時會顯示下列畫面。

點選「開始遊戲」後,畫面上會顯示一幅圖畫。你的任務是根據畫面頂端顯示的提示猜出圖案名稱,提示會顯示名稱的第一個字母和長度。

如果不知道該如何命名,可以點按「SKIP」(略過) 按鈕跳過關卡。
你可能需要額外提示來猜出答案。點選「提示」按鈕並觀看獎勵影片廣告,即可獲得額外提示。看完廣告後,系統會揭露一個額外字母做為獎勵。

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、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 | 在遊戲中完成的關卡數 |
建立用於記錄自訂事件的輔助類別
為輕鬆記錄數據分析事件,您將建立輔助類別來管理自訂事件。
首先,請在 com.codelab.awesomedrawingquiz 套件下建立新的 Kotlin 檔案 (不是 Kotlin 類別),並將其命名為 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"
接著,加入擴充功能函式,協助您記錄遊戲中的自訂事件。請注意,大多數自訂事件都包含參數,方便您進一步瞭解各個事件。另請注意,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())
}
}
在遊戲中記錄 Analytics 事件
在 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. 偵錯 Analytics 事件
您可以在 Firebase 主控台中使用 DebugView,確認事件是否正確記錄。DebugView 可讓您近乎即時地查看應用程式在開發裝置上記錄的原始事件資料。
這項工具在開發階段的插碼程序中非常實用,有助於驗證,並找出 Analytics 導入作業中的任何錯誤。
啟用偵錯模式
一般來說,應用程式記錄的事件會在大約一小時內分批上傳。如要即時驗證 Analytics 導入作業,請在開發裝置上啟用偵錯模式,以盡量減少延遲時間的方式上傳事件。
如要啟用偵錯模式,請完成下列步驟:
- 在 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 偵錯 Analytics 事件
在測試裝置上啟用偵錯模式後,請前往 Firebase 控制台中的專案,然後從選單中選取「Analytics」>「DebugView」。接著在測試裝置上玩遊戲,即可查看系統記錄的事件,並顯示在 DebugView 報表中。

點按事件名稱,即可查看各個事件的詳細資訊。舉例來說,以下螢幕截圖顯示與 level_start 事件相關聯的參數詳細資料。

詳情請參閱 DebugView 說明中心文章。
9. 啟用自訂維度和指標
根據預設,Google Analytics for Firebase 會收集事件總數。如要查看特定事件參數的報表,您必須明確啟用該參數的報表功能。Google Analytics for Firebase 隨後會顯示其他資訊卡,顯示自訂參數的統計資料。
如要註冊自訂維度和指標,請按照下列步驟操作:
- 前往 Firebase 控制台,然後選取先前建立的「Awesome Drawing Quiz」專案。
- 在導覽選單中,依序點選「Analytics」>「Events」。
- 按一下 [管理自訂定義]。
- 在「自訂維度」分頁中,按一下「建立自訂維度」。
- 在「事件參數名稱」欄位中輸入 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 參數相關聯的值,如下所示。

根據上方的螢幕截圖,您可以輕鬆找出「地平線」的錯誤答案數量最多,表示相較於其他等級,使用者覺得這個等級較難。
根據這裡的洞察資料,您可以決定不要為新手使用者提供困難的關卡,以維持高留存率。
平均需要嘗試幾次才能過關?
在「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 101 Android 程式碼研究室。您可以在
101-complete_and_102-base 資料夾中找到本程式碼研究室的完整程式碼。
在 AdMob + Firebase 程式碼研究室的下一部分,您將瞭解如何使用漏斗圖,以視覺化方式呈現應用程式事件流程。下一部分也會說明如何使用遠端設定和 A/B 測試,在不更新應用程式的情況下,最佳化遊戲中的參數值。