AdMob+Firebase 入門 Android:設定與Analytics 基本概念

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 傳輸線連接裝置),或搭載支援 Play 商店/Google API 的系統映像檔執行 AVD (Android 虛擬裝置) 的 Android Emulator (Android 虛擬裝置)

您對 AdMob 使用體驗的評價如何?

新手 中級 還算容易

你對 Firebase 的使用體驗有何評價?

新手 中級 還算容易

2. 設定開發環境

下載程式碼

點選下方按鈕,即可下載這個程式碼研究室的所有程式碼:

將下載的 ZIP 檔案解壓縮。這會將根資料夾解壓縮,並命名為 admob-firebase-codelabs-android

...或透過指令列複製 GitHub 存放區。

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

存放區包含四個資料夾,如下所示:

  • android_studio_folder.png101-base:您將在這個程式碼研究室中建構的程式碼。
  • android_studio_folder.png101-complete_and_102-base - 完成本程式碼研究室的程式碼;102 程式碼研究室的起點。
  • android_studio_folder.png102-complete:102 程式碼研究室完成後的程式碼。

匯入範例應用程式

啟動 Android Studio,然後在歡迎畫面中選擇「Import project」。接著,從您下載的程式碼中選取 101-base 目錄。

現在 Android Studio 應已開啟專案。

3. 設定獎勵影片廣告單元 (選用)

為了方便起見,範例應用程式已包含專屬的獎勵影片廣告單元。如果您不想在 AdMob 帳戶下建立新帳戶,可略過這個步驟

若要在帳戶中建立新的 AdMob 應用程式,請按照下列說明操作:

  1. 前往 AdMob 控制台
  2. 在「應用程式」選單中,按一下「新增應用程式」
  3. 當系統詢問「您已經在 Google Play 或 App Store 發布應用程式」時,解答「」。
  4. 將應用程式命名為「Awesome Drawing Quiz」。選擇「Android」做為「平台」,然後按一下「Add」

在帳戶中建立 AdMob 應用程式後,請按照下方步驟建立新的獎勵影片廣告單元。

  1. 在 AdMob 前端按一下 [應用程式] 選單,然後從應用程式清單中選取「超棒繪圖測驗」。
  2. 按一下「新增廣告單元」,建立新的獎勵影片廣告單元。
  3. 針對廣告格式選取「獎勵廣告」

7672f41ec611101b.png

  1. 視需要提供廣告單元名稱。接著將獎勵金額設為 1,並將獎勵項目設為「提示」 (這是應用程式目前提供給使用者的獎勵)。按一下「建立廣告單元」,建立新的獎勵影片廣告單元。

6d067814a2c38264.png

  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. 選取「Add Project」,然後將專案命名為「Awesome Drawing Quiz」。確認「為這項專案啟用 Google Analytics」圓形按鈕已開啟。
  3. 選取要使用的 Google Analytics 帳戶。就大部分來說,選取「Firebase 預設帳戶」選項應該就足夠了;不過,如果您還想使用其他 Google Analytics 帳戶,請在這裡選取。
  4. 按一下「建立專案」

新增 Android 應用程式

  1. 在新專案的總覽畫面中,按一下 [Add Firebase to your Android app] (將 Firebase 加入您的 Android 應用程式)
  2. 輸入程式碼研究室的套件名稱:com.codelab.awesomedrawingquiz
  3. 為應用程式設定暱稱:「超棒繪圖測驗」
  4. 將「SHA-1」欄位留空,因為這項專案不需要 SHA-1。
  5. 選取「註冊應用程式」即可註冊應用程式。

在應用程式中加入 google-services.json 檔案

接下來,系統會顯示提示畫面,您可以在其中下載設定檔,其中包含應用程式所有必要的 Firebase 中繼資料。按一下「Download google-service.json」,然後將檔案複製到專案的 android_studio_folder.png「app」目錄。

32419a0fa25a1405.png

宣告依附元件版本

首先,請新增每個依附元件的版本,以便將 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 服務外掛程式會使用 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 檔案同步處理。選取「檔案」>將專案與 Gradle 檔案同步處理選單,將專案與 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.png

使用者指標資訊卡 (AdMob)

透過使用者指標資訊卡,您可以查看調整廣告體驗可能對使用者行為造成什麼影響。

5f56366f1b31d4a1.png

獎勵廣告報表 (AdMob)

獎勵廣告報表提供多種指標,協助發布商瞭解使用者與獎勵廣告互動的情形。

658a2868777690ea.png

總收益資訊卡 (Firebase)

將 AdMob 應用程式連結至 Firebase 後,Firebase 資訊主頁中的總收益資訊卡就會顯示 AdMob 收益,以及應用程式內購和電子商務購買。

98cb283977b023a.png

廣告事件報表 (Firebase)

系統會自動收集廣告相關事件 (點擊、曝光和獎勵事件),並用於 Google Analytics for Firebase。

bf77bd8c00c1441b.png

6. 執行專案

編譯並執行專案後,您會在應用程式啟動時看到以下畫面。

15f1d8041988974c.png

按一下 [開始遊戲] 後,螢幕上會顯示繪圖。您的任務是透過頂端顯示的提示猜測繪圖的名稱,即可推斷繪圖名稱的首字母和長度。

8e87e96256d6874a.png 9c4a0143c3234cb2.png

如果您不清楚繪圖的名稱,可以按一下「SKIP」按鈕跳過一個等級。

您可能會需要其他線索,以便猜出答案。只要按一下「HINT」按鈕並觀看獎勵影片廣告,就能獲得額外線索。使用者看完廣告後,系統會顯示一個額外信函做為獎勵。

edcf6f0d833ea4ea.png 47ab9a07b1c71711.png

7. 新增應用程式事件

在「超級繪圖測驗」中深入瞭解使用者歷程,您可以定義一些自訂事件來追蹤使用者在遊戲中的行為,如下所示:

事件名稱

已觸發...

參數

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

在遊戲中清除的關卡數量

建立用來記錄自訂事件的輔助類別

如要輕鬆記錄數據分析事件,請建立輔助類別來管理自訂事件。

首先,請建立新的 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"

然後新增擴充功能函式以便記錄遊戲中的自訂事件。請注意,大多數的自訂事件都包含參數,可讓您進一步瞭解每個事件。另請注意,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. 在 Android Studio 中開啟「Terminal」工具視窗 (依序點選「View」>「Tool Windows」>「Terminal」)。

c8dc1b4f08a224b8.png

  1. 執行下列指令 (確認測試 Android 裝置已連接至電腦或 Android Emulator 正在執行):
adb shell setprop debug.firebase.analytics.app com.codelab.awesomedrawingquiz

偵錯模式會保持啟用狀態,直到您執行下列指令來明確停用偵錯模式為止:

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

使用 DebugView 對 Analytics 事件進行偵錯

在測試裝置上啟用偵錯模式後,請前往 Firebase 控制台中的專案,然後選取「Analytics」>DebugView」。接著,在測試裝置上玩遊戲,看看系統會記錄事件並在 DebugView 報表中顯示。

827059255d09ac00.png

您可以按一下事件名稱來查看個別事件的詳細資訊。例如,以下螢幕截圖顯示與 level_start 事件相關的參數詳細資料。

475db00d05d03ab8.png

詳情請參閱 DebugView 說明中心文章

9. 啟用自訂維度和指標

根據預設,Google Analytics for Firebase 會收集事件總數。您需要為每個想查看的事件參數明確啟用該參數的報表功能。Google Analytics for Firebase 就能顯示其他資訊卡,顯示自訂參數的統計資料。

如要登錄自訂維度和指標,請按照下列步驟操作:

  1. 前往 Firebase 控制台,然後選取先前建立的 Awesome Drawing Quiz 專案。
  2. 按一下 [Analytics] >。導覽選單中的活動
  1. 按一下 [管理自訂定義]
  2. 在「自訂維度」分頁中,按一下「建立自訂維度」
  3. 在「事件參數名稱」欄位中輸入 level_name,然後按一下「儲存」以完成參數登錄程序。

3d20ee9d7de74e9b.png

  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.png

根據上方螢幕截圖,您可以輕鬆判斷水平問題的答案最多,這代表使用者難以與其他等級相比。

這時您可以根據這份洞察資料,決定不將困難的層級用於獎勵使用者,並維持高留存率。

平均來說,我有多少次清除過某個關卡?

Awesome Drawing 測驗 中,使用者可以視需要提交每個關卡的答案。

您已在 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 個關卡。使用者完成 6 個關卡後 (無論每個關卡清除或失敗),都會以 number_of_correct_answers 做為參數來觸發 game_complete 事件。number_of_correct_answers 參數代表使用者提供正確答案的階層數。

按一下事件報表中的「game_complete」事件。在 game_complete 事件報表中,找出「number_of_correct_answers」資訊卡。您會看到平均 number_of_correct_answers 個事件參數的數量。

d9eeaa019d1bceb4.png

如果清除關卡的平均數太低,建議您調整遊戲中的關卡大小,讓使用者更輕鬆過早關卡,這樣他們既不會失去興趣,也能繼續玩遊戲。

11. 全部完成!

您已完成 AdMob + Firebase 101 Android 程式碼研究室。您可以在 android_studio_folder.png101-complete_and_102-base 資料夾中找到本程式碼研究室完成的程式碼。

在下一節的 AdMob + Firebase 程式碼研究室中,您將瞭解如何使用漏斗圖,以圖表呈現應用程式事件流程。下一部分也會介紹如何使用遠端設定和 A/B 測試,在不更新應用程式的情況下最佳化遊戲的參數值。