AdMob+Firebase 102 Android:不更新應用程式即可調整應用程式行為

1. 簡介

假設您在 Play 商店發布應用程式後,需要調整應用程式中的某些參數值。通常您應該重新發布新版應用程式,並要求使用者更新手機上的應用程式。

一般來說,如果您想對應用程式進行長期變更,可以更新應用程式。不過,如果您要經常調整應用程式中某些參數的值,該怎麼做呢?或者,您想進行一些實驗,找出最佳應用程式設定嗎?

在這種情況下,應用程式更新可能無法順利進行。因為更新作業需要一段時間才會完全傳播給使用者。此外,跨多個應用程式版本執行實驗相當困難。

此外,您要如何判斷應用程式的使用者歷程是否正常運作?您可能會參考 Play 管理中心的使用者留言。不過,這可能不夠精確,無法做出明確的決策。

進行本程式碼研究室時,如果你遇到任何問題 (例如程式碼錯誤、文法錯誤或用詞不明確等),請透過程式碼研究室左下角的「回報錯誤」連結回報問題。

課程內容

  • 如何在 Google Analytics for Firebase 中建立漏斗
  • 如何使用 Firebase 遠端設定
  • 如何執行 Firebase A/B 測試

軟硬體需求

  • Android Studio 4.1 以上版本
  • Google 帳戶
  • 搭載 Android 5.0 以上版本的測試裝置,以及用來連接裝置的 USB 傳輸線;或是執行 AVD(Android 虛擬裝置) 的 Android 模擬器,以及支援 Play 商店/Google API 的系統映像檔

您對 AdMob 的使用經驗程度為何?

新手 中級 熟練

您對 Firebase 的經驗程度如何?

新手 中級 熟練

2. 設定開發環境

下載程式碼

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

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

...或從指令列複製 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-complete_and_102-base 目錄。

現在應該已在 Android Studio 中開啟專案。

將 Firebase 設定檔新增至 Android 專案

  1. 在「Awesome Drawing Quiz」專案的總覽畫面中,按一下「設定」圖示 9bacb5ada7cbaaf6.png
  2. 在「一般」分頁下方,選取要下載 google-service.json 檔案的 Android 應用程式。
  3. 將設定檔移至專案的 android_studio_folder.pngapp 目錄。797cde1881a38fdf.png

3. 從控制台開啟 Firebase 專案

在繼續下一個步驟之前,請從 Firebase 控制台開啟專案,該專案是在 AdMob + Firebase 101 程式碼研究室的「設定 Firebase 專案」步驟中建立。

e0a028059c9e00cb.png

4. 建立應用程式事件漏斗

您可能已新增幾個應用程式事件,用於追蹤應用程式內的使用者活動。只要查看各個應用程式事件的報表,就能取得與事件相關的詳細資料,例如總計次數、每位使用者的平均次數、客層等。

不過,如果想查看一系列事件的完成率,而不是只關注特定事件,該怎麼做呢?在 Google Analytics for Firebase 中,您可以使用程序,以視覺化方式呈現一系列應用程式事件的完成率並進行最佳化。

建立漏斗

如要建立程序,請按照下列步驟執行:

  1. 前往 Firebase 控制台,然後選取先前建立的「Awesome Drawing Quiz」專案。
  2. 按一下「漏斗」
  3. 按一下 [新增程序]
  4. 輸入程序的名稱和說明。
  5. 選取要做為程序中步驟的前兩個事件。
  6. 如要新增更多步驟,請按一下 [新增其他事件],然後選取某個事件。
  7. 點選「建立」。

按照上述步驟建立下列漏斗:

#1 程序名稱:層級成功率 事件:level_startlevel_successd3bc78ef61a261d7.png

#2 漏斗名稱:插頁式獎勵廣告完成率 事件:ad_reward_promptad_reward_impressionad_reward45c9542dfa663014.png

#3 漏斗名稱:遊戲完成率 事件:game_startgame_completedab25e8501746d5f.png

查看程序分析

建立漏斗後,您可以在 Firebase 主控台的「漏斗」選單中存取漏斗。按一下清單中的漏斗名稱,即可查看各個漏斗的詳細分析。

620c0e84587c8ad4.png

舉例來說,按一下「等級成功率」。系統會顯示漏斗詳細資料,如下所示:

c889f9b6ece15847.png

從上方的螢幕截圖中,您可以看到使用者在開始關卡 (觸發 level_start 事件) 後,完成關卡 (觸發 level_success 事件) 的百分比。從這裡可以看出,有 46.2% 的使用者已通過關卡。

點選「事件計數」後,系統會根據事件數顯示指標,如下所示:

d044fb7b07e6e0d9.png

根據上述螢幕截圖中的指標,這段期間內有 116 次嘗試 (觸發 level_start 事件),以及 57 次通關 (觸發 level_success 事件)。

由於以事件為準的完成率(49.1%) 略高於以使用者為準的完成率(46.2%),因此可以說有少數人的表現優於其他人。

5. 將遠端設定整合至應用程式

您可以根據應用程式事件和漏斗取得應用程式的洞察資料,因此可能需要最佳化應用程式,通常包括微調應用程式中的參數值。如要修改這些參數的值,您必須更新應用程式,變更才能套用至使用者。

使用 Firebase 中的遠端設定,您不必更新應用程式就能調整這些值,也就是說,不必強制使用者下載更新,就能變更應用程式行為,避免打擾使用者。

在本程式碼研究室中,您將瞭解如何使用 Remote Config,調整獎勵金額 (觀看獎勵影片廣告後揭露的字母數量),不必更新應用程式。

將遠端設定新增至應用程式依附元件

首先,將 Firebase 遠端設定新增至應用程式依附元件。

app/build.gradle

apply plugin: 'com.android.application'

android {
    ...
}

dependencies {
    ...

    // TODO: Add Firebase Remote Config dependency (102)
    implementation 'com.google.firebase:firebase-config-ktx'

    ...
}

...

將專案與 Gradle 檔案同步

為確保應用程式可使用所有依附元件,請使用 Gradle 檔案同步處理專案。選取「File」>「Sync Project with Gradle Files」選單,將專案與 Gradle 檔案同步處理。

設定遠端設定參數的預設值

從遠端設定擷取值時,必須連上網路。如果網路無法連線,您應為每個遠端設定參數定義預設值。

res/xml 資料夾下建立 remote_config_defaults.xml 檔案。接著,請按照以下方式設定獎勵金額的預設值 (reward_amount))。

res/xml/remote_config_defaults.xml

<?xml version="1.0" encoding="utf-8"?>
<defaultsMap>
    <entry>
        <key>reward_amount</key>
        <value>1</value>
    </entry>
</defaultsMap>

請注意,reward_amount 是遠端設定中的參數名稱。

從遠端設定擷取獎勵金額

修改 AwesomeDrawingQuiz.kt,讓 GameSettings 類別保留對 RemoteConfig 例項的參照。

請注意,RemoteConfig 執行個體已設為在偵錯模式中從伺服器擷取最新值,以利開發程序。(呼叫 fetch(0L),將最短擷取間隔設為零秒)

AwesomeDrawingQuiz.kt

class AwesomeDrawingQuiz : Application() {

    ...

    // COMPLETE: Provide FirebaseRemoteConfig instance (102)
    private fun provideGameSettings() = GameSettings(provideRemoteConfig())

    // COMPLETE: Add a function that provides a FirebaseRemoteConfig instance (102)
    private fun provideRemoteConfig(): FirebaseRemoteConfig {
        val rc = Firebase.remoteConfig.apply {
            setDefaultsAsync(R.xml.remote_config_defaults)
        }
        val fetchTask = if (BuildConfig.DEBUG) rc.fetch(0L) else rc.fetch()
        fetchTask.addOnCompleteListener {
            if (it.isSuccessful) {
                Log.d("AwesomeDrawingQuiz", "Remote config value fetched")
                rc.activate()
            }
        }
        return rc
    }
}

接著,變更 GameSettings 類別,從遠端設定擷取獎勵金額。

GameSettings.kt

// TODO: Add FirebaseRemoteConfig as a class member
class GameSettings(private val rc: FirebaseRemoteConfig) {

  ...

  // TODO: Apply reward amount from the Remote Config (102)
  val rewardAmount: Int
    get() = rc.getLong(KEY_REWARD_AMOUNT).toInt()

  companion object {
    ...

    // TODO: Add a key for 'reward_amount' Remote Config parameter (102)
    private const val KEY_REWARD_AMOUNT = "reward_amount"
  }
}

從控制台建立遠端設定參數

接著,您將建立新的獎勵金額遠端設定參數,以便即時調整其值。

如要建立新參數,請前往 Firebase 控制台,然後選取先前建立的「Awesome Drawing Quiz」專案。按一下「Remote Config」->「ADD YOUR FIRST PARAMETER」(新增第一個參數) 按鈕。

7f52617141c53726.png

將參數命名為 reward_amount,並將預設值設為 1。然後按一下「新增參數」按鈕。

cbc771fd1685b29c.png

按一下「發布變更」按鈕,即可向使用者發布變更。

d6a6aa4a60e06ee9.png

6. 使用遠端設定變更應用程式行為

現在,您可以在 Firebase 控制台上設定「Awesome Drawing Quiz」的獎勵金額,不必更新應用程式程式碼。

在本節中,您將獎勵金額從 1 改為 2,讓應用程式在使用者觀看獎勵廣告後,再顯示兩個提示字元。

更新 reward_amount 參數的預設值

前往 Firebase 控制台,然後選取先前建立的「Awesome Drawing Quiz」專案。按一下「遠端設定」,然後點按清單中的 reward_amount。接著,將預設值變更為 2,然後按一下「更新」按鈕。

9a9bd8a26a39bfe3.png

按一下「發布變更」按鈕,即可向使用者發布變更。

d6a6aa4a60e06ee9.png

確認應用程式行為變更

如要確認應用程式行為是否有所變更,請再次執行專案。看完獎勵廣告後,您會發現應用程式現在會顯示兩個字母做為獎勵,這是在 Remote Config 控制台中設定的。

觀看獎勵廣告前

揭露兩個額外字母做為獎勵

7. 建立實驗,找出最佳獎勵金額

現在,您不必發布應用程式更新,就能變更獎勵金額。不過,如何判斷變更的金額是否對應用程式有益?

使用 Firebase A/B 測試功能,即可執行實驗來改善應用程式的整體使用者體驗,不必更新應用程式,也不必另外建立工具來執行及追蹤各項實驗的成效。

設計實驗

建立新實驗前,請先設定明確的實驗目標。建立新實驗前,請務必先完成下列檢查清單。

  • 目標:您想改善哪一項指標?(例如遊戲難度、廣告顯示時間/能見度等)
  • 原因:您執行實驗的業務目標是什麼?(例如盡量提高廣告收益、提高留存率等)
  • 對象:誰會成為實驗對象?(例如:所有使用者、特定使用者目標對象等)

在本程式碼研究室中,您將建立實驗,盡量提高 Awesome Drawing Quiz 的每日使用者參與度,並找出最佳獎勵金額。

建立實驗

Firebase 控制台開啟 Awesome Drawing Quiz 專案。選取「A/B 測試」選單,然後按一下「建立實驗」按鈕。

選取「遠端設定」,建立遠端設定實驗。

f38a85328ab54e7e.png

將實驗命名為「獎勵金額」,如下列螢幕截圖所示。

15d552adb61c0b08.png

設定指定目標選項。在本程式碼研究室中,您將以 Awesome Drawing Quiz 的所有使用者為目標。

61b316741a63050f.png

由於實驗的主要目標是找出可讓每日使用者參與度達到最高值的最佳值,請選取「每日使用者參與度」做為追蹤的主要指標。

694641b57d90ff65.png

最後,請設定控制組和變化版本群組,找出成效較佳的群組。從控制組選取 reward_amount,並保留其值不變。將變體群組命名為「Less reward」(較少獎勵),然後將 reward_amount 的值變更為 1。

10ed7f5b06858519.png

完成這項設定後,「較少獎勵」群組的成員會獲得一封信做為獎勵,而「控制組」的成員則會獲得兩封信。因此,您會看到獎勵金額對使用者的影響。

點選「查看」按鈕後,您會看到實驗總覽,如下所示。

ae6477ce79f6265d.png

執行實驗

按一下「開始實驗」按鈕,即可執行實驗。請注意,實驗開始後就無法變更設定。

7131bf9b4fa74fa5.png

8. 管理實驗

查看實驗進度

您可以在 Firebase 控制台的「A/B 測試」選單中查看實驗進度,如下列螢幕截圖所示。請注意,您也可以在資訊卡中查看過去 30 分鐘內參與實驗的使用者人數。

8a7009bdd8871d95.png

點選清單中的實驗後,即可查看實驗詳細資料。在實驗能宣告領先者 (即成效最佳的變化版本) 前,您會看到「現在宣告領先者還為時過早」訊息。

a4e7ca3e3f4711cd.png

實驗執行一段時間後,系統就會開始在「改善總覽」部分下方,顯示實驗期間收集到的資料。您可以比較各個版本的成效,判斷何者成效較佳。下方的螢幕截圖顯示「改善總覽」專區的範例。

e2d00fc27c053fd3.png

在「改善總覽」部分下方的表格中,您可以查看實驗目標指標的詳細資料,以及實驗中追蹤的其他指標。下方的螢幕截圖顯示指標詳細資料區段的範例。

c3859d642f85cc52.png

向所有使用者推出領導者

實驗執行一段時間後,如果出現領先者 (即勝出版本),即可向所有使用者套用實驗設定。A/B 測試找出明顯的領先者後,系統會建議您向所有使用者推出領先版本。

86cb6a6c07516634.png

不過,即使實驗結果沒有明顯的領先版本,您仍可向所有使用者顯示特定變化版本。

在實驗詳細資料畫面中,點選內容選單 ( 73afe611adf58774.png),然後點選「推出變體」

374e1c72be1d0656.png

選擇要向所有使用者推出的變體,然後點選「在遠端設定中查看」按鈕,在遠端設定中進行變更前先檢查變更。

e176f6e6a72c754.png

確認草稿沒有任何問題後,請按一下「發布變更」按鈕,向所有使用者發布變更。

d65d545620ce93f6.png

9. 大功告成!

您已完成 AdMob + Firebase 102 Android 程式碼研究室。您可以在 android_studio_folder.png102-complete 資料夾中找到本程式碼實驗室的完整程式碼。