在 Android 程式碼研究室中整合遠端設定

1. 簡介

上次更新時間:2021 年 3 月 9 日

什麼是 Firebase 遠端設定?

Firebase 遠端設定是一項雲端服務,可讓您變更應用程式的行為和外觀,不必要求使用者下載應用程式更新。使用遠端設定時,您可以建立應用程式內預設值來控制應用程式的行為和外觀。之後您可以使用 Firebase 控制台或遠端設定後端 API,覆寫所有應用程式使用者或特定使用者族群的應用程式內預設值。應用程式會控制套用更新的時間,且可以經常檢查更新並套用更新,幾乎不會對效能造成影響。

運作方式

遠端設定內含的用戶端程式庫可處理重要工作 (例如擷取參數值及快取這些工作),同時可讓您控制啟用新值的時機,以便對應用程式的使用者體驗造成影響。這可讓您控制變更時機的時間,保護應用程式的使用體驗。

遠端設定用戶端程式庫 get 方法提供參數值的單一存取點。應用程式使用取得應用程式內預設值的相同邏輯取得伺服器端值,因此您不必編寫大量程式碼,就能將遠端設定功能新增至應用程式。

如要覆寫應用程式內預設值,請透過 Firebase 控制台或遠端設定後端 API 建立參數,其名稱必須與應用程式中使用的參數相同。您可以設定每個參數的伺服器端預設值來覆寫應用程式內預設值,或是建立條件式值,以便為符合特定條件的應用程式執行個體覆寫應用程式內預設值。這張圖片顯示在遠端設定後端和應用程式中,參數值的優先順序:

61f12f33d2ac3133.png

課程內容

  • 如何導入 Firebase 遠端設定
  • 如何使用 Firebase 遠端設定在不更新應用程式的情況下變更值

軟硬體需求

  • 最新版 Android Studio
  • Firebase 帳戶
  • (建議,但選用) 執行應用程式的實體 Android 裝置
  • 對 Java 或 Kotlin 有基本瞭解

2. 開始設定

(選用) 下載程式碼範例

在本程式碼研究室中,您將建構自己的測試應用程式,但如果您想查看並執行現有的範例應用程式,可以下載快速入門導覽課程程式碼範例。

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

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

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

$ git clone https://github.com/firebase/quickstart-android.git

存放區包含多個資料夾我們將使用 android_studio_folder.png config 資料夾。

(選用) 匯入程式碼範例

啟動 Android Studio,然後在歡迎畫面中選擇「Import project」。接著開啟下載的資料夾,然後選取 android_studio_folder.png「config」資料夾。接著按一下「開啟」。

5f90353b0b519642.png

建立新的 Android 專案

  1. 在 Android Studio 中啟動新專案
  2. 選取基本活動
  3. 在「Configure Your Project」螢幕:
  4. 為專案命名,系統會自動為您產生套件名稱和「儲存位置」。
  5. 語言:Java
  6. 最低 SDK 16

3. 將 Firebase 和 Firebase Analytics 新增至您的 Android 專案

建立 Firebase 專案

您必須先建立要連結至 iOS 應用程式的 Firebase 專案,才能將 Firebase 加到您的 Android 應用程式。如要進一步瞭解 Firebase 專案,請參閱「瞭解 Firebase 專案」一文。

  1. 在 Firebase 控制台中,按一下「新增專案」,然後選取或輸入「專案名稱」910158221fe46223.png

如果您有現有的 Google Cloud Platform (GCP) 專案,可以從下拉式選單中選取該專案,將 Firebase 資源新增至該專案。

  1. (選用) 如要建立新專案,您可以編輯專案 ID

Firebase 會自動為你的 Firebase 專案指派專屬 ID。請前往「瞭解 Firebase 專案」頁面,瞭解 Firebase 如何使用專案 ID。

  1. 按一下「繼續」
  2. 為專案設定 Google Analytics,以便使用下列任一 Firebase 產品,享有最佳體驗:
  • Firebase Crashlytics
  • Firebase 預測
  • Firebase 雲端通訊
  • Firebase 應用程式內通訊
  • Firebase 遠端設定
  • Firebase A/B 測試

看到提示時,請選擇使用現有的 Google Analytics 帳戶或建立新帳戶。如果您選擇建立新帳戶,請選取 Analytics 報表位置,然後接受專案的資料共用設定和 Google Analytics 條款。

1282a798556779ab.png

48ade68c8de27d2.png

  1. 按一下「建立專案」。如果使用現有的 GCP 專案,請按一下「新增 Firebase」

Firebase 會自動為你的 Firebase 專案佈建資源。程序完成後,系統就會將您帶往 Firebase 控制台中 Firebase 專案的總覽頁面。

向 Firebase 註冊應用程式

建立 Firebase 專案後,您可以在專案中新增 Android 應用程式。

如要進一步瞭解在 Firebase 專案中新增應用程式的最佳做法和注意事項,包括如何處理多個建構變數,請參閱「瞭解 Firebase 專案」一文。

  1. 前往 Firebase 主控台。
  2. 按一下「專案總覽」頁面頂端的「Android」圖示,啟動設定工作流程。已在 Firebase 專案中加入應用程式,點選「新增應用程式」即可顯示平台選項。
  3. 在「Android package name」欄位中,輸入應用程式的套件名稱。
  4. (選用) 輸入應用程式暱稱
  5. 將「SHA-1」欄位留空,因為這項專案不需要 SHA-1。
  6. 按一下 [Register app] (註冊應用程式)

新增 Firebase 設定檔

接下來,系統會提示您下載設定檔,其中包含應用程式的所有必要 Firebase 中繼資料。點選「Download google-services.json」取得 Firebase Android 設定檔 (google-services.json)。

bc8ec7d3c9a28d75.png

a99b7415462dfc8b.png

專案層級的 Gradle 檔案 (build.gradle) 中新增規則,納入 Google 服務 Gradle 外掛程式。請一併確認您有 Google 的 Maven 存放區。

專案層級 build.gradle (<project>/build.gradle):

buildscript {

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
  }

  dependencies {
    // ...

    // Add the following line:
    classpath 'com.google.gms:google-services:4.3.5'  // Google Services plugin
  }
}

allprojects {
  // ...

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
    // ...
  }
}

模組 (應用程式層級) Gradle 檔案 (通常是 app/build.gradle) 中,套用 Google 服務 Gradle 外掛程式:

應用程式層級 build.gradle (<project>/<app-module>/build.gradle):

套用外掛程式:「com.android.application」

// 加入以下這行程式碼:

apply plugin: 'com.google.gms.google-services'// Google 服務外掛程式

android {

// ...

}

將 Firebase SDK 加入您的 Android 應用程式

使用遠端設定時,必須使用 Google Analytics,才能條件式指定應用程式執行個體給使用者屬性和目標對象。確認您已在專案中啟用 Google Analytics。

(已在快速入門導覽課程程式碼中完成這項操作)

使用 Firebase Android BoM,在模組 (應用程式層級) Gradle 檔案 (通常為 app/build.gradle) 中宣告遠端設定 Android 程式庫的依附元件。透過 Firebase Android BoM,應用程式一律會使用相容的 Firebase Android 程式庫版本。

此外,設定 Analytics 時,您必須將 Google Analytics 專用 Firebase SDK 新增至應用程式。在依附元件下方,新增下列程式碼:

app/build.gradle

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:26.6.0')

    // Declare the dependencies for the Remote Config and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-config'
    implementation 'com.google.firebase:firebase-analytics'
}

將專案與 Gradle 檔案同步處理

為確保您的應用程式可使用所有依附元件,請依序選取「File」>「File」> 將專案與 Gradle 檔案同步處理將專案與 Gradle 檔案同步處理

4. 查看遠端設定的主要元件

接下來,我們將探討在應用程式中使用遠端設定的步驟。您在快速入門程式碼研究室程式碼中已完成這些步驟。查看快速入門導覽課程程式碼研究室的程式碼時,請參考本節說明,瞭解具體情況。

1. 取得遠端設定 Singleton 物件

取得遠端設定物件執行個體,並設定最短擷取間隔,允許經常重新整理:

MainActivity.java

mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build();
mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);

單例模式物件的用途是儲存應用程式內的預設參數值、從後端擷取更新後的參數值,以及控管擷取後何時提供給應用程式的值。

在開發期間,建議您設定相對較低的擷取間隔下限。詳情請參閱節流

2. 設定應用程式內預設參數值

您可以在遠端設定物件中設定應用程式內預設參數值,讓應用程式在連線至遠端設定後端之前能正常運作。這樣一來,如果後端未設定任何預設值,系統就會提供預設值。

您可以使用儲存在應用程式 res/xml 資料夾中的 Map 物件或 XML 資源檔案,定義一組參數名稱和預設參數值。遠端設定快速入門導覽課程範例應用程式會使用 XML 檔案來定義預設參數名稱和值。建立自己的 XML 檔案的方法如下:

  1. res 資料夾下建立 xml 資料夾。

4b8a2a637a626e94.png

  1. 在新建立的 xml 資料夾上按一下滑鼠右鍵,然後建立檔案。

358b4ba740120ece.png

  1. 設定預設值。在下一節中,您將嘗試變更遠端設定快速入門導覽課程 XML 檔案中的預設值。
  2. 使用 setDefaultsAsync(int) 將這些值新增至遠端設定物件,如下所示:

MainActivity.java

mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);

3. 取得要用於應用程式的參數值

您現在可以從遠端設定物件取得參數值。如果您在後端設定值、擷取這些值,然後加以啟用,應用程式就能使用這些值。否則,您可以使用 setDefaultsAsync(int) 設定應用程式內參數值。如要取得這些值,請呼叫下列對應至應用程式預期資料類型的方法,並提供參數鍵做為引數:

4. 擷取並啟用值

  1. 如要從遠端設定後端擷取參數值,請呼叫 fetch() 方法。您在後端設定的任何值都會經過擷取,並儲存在遠端設定物件中。
  2. 如要讓應用程式使用擷取的參數值,請呼叫 activate() 方法。如果您想在單一呼叫中擷取及啟用值,可以使用 extractAndActivate() 要求,從遠端設定後端擷取值並提供給應用程式:

MainActivity.java

mFirebaseRemoteConfig.fetchAndActivate()
        .addOnCompleteListener(this, new OnCompleteListener<Boolean>() {
            @Override
            public void onComplete(@NonNull Task<Boolean> task) {
                if (task.isSuccessful()) {
                    boolean updated = task.getResult();
                    Log.d(TAG, "Config params updated: " + updated);
                    Toast.makeText(MainActivity.this, "Fetch and activate succeeded",
                            Toast.LENGTH_SHORT).show();

                } else {
                    Toast.makeText(MainActivity.this, "Fetch failed",
                            Toast.LENGTH_SHORT).show();
                }
                displayWelcomeMessage();
            }
        });

這些更新過的參數值會影響應用程式的行為和外觀,因此建議您一次啟用擷取的值,確保使用者享有順暢的體驗,例如下次開啟應用程式時。如需詳細資訊和範例,請參閱遠端設定載入策略

節流

如果應用程式在短時間內擷取太多次,系統會限制擷取呼叫,且 SDK 會傳回 FirebaseRemoteConfigFetchThrottledException。在 SDK 17.0.0 版之前,最多只能在 60 分鐘內發出 5 個擷取要求 (較新的版本則有較寬的限制)。

在應用程式開發期間,建議您頻繁 (每小時多次) 擷取並啟用設定,以便在開發及測試應用程式時迅速疊代。如要因應最多有 10 名開發人員的專案快速疊代,您可以在應用程式中暫時設定 FirebaseRemoteConfigSettings 物件,將擷取間隔下限 (setMinimumFetchIntervalInSeconds) 設為較低的值。

遠端設定的預設擷取間隔時間下限為 12 小時,這表示無論實際發出多少擷取呼叫,系統都不會在 12 小時內多次從後端擷取設定。具體來說,最小擷取間隔依下列順序決定:

  1. fetch(long) 中的參數
  2. FirebaseRemoteConfigSettings.setMinimumFetchIntervalInSeconds(long) 中的參數
  3. 預設值是 12 小時

如要將最短擷取間隔設為自訂值,請使用 FirebaseRemoteConfigSettings.Builder.setMinimumFetchIntervalInSeconds(long)

5. 透過遠端設定變更應用程式行為

變更應用程式內的預設參數

開啟 res/xml/remote_config_defaults.xml,然後將預設值改為其他值。

res/xml/remote_config_defaults.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- START xml_defaults -->
<defaultsMap>
    <entry>
        <key>loading_phrase</key>
        <value>Fetching config...</value>
    </entry>
    <entry>
        <key>welcome_message_caps</key>
        <value>false</value>
    </entry>
    <entry>
        <key>welcome_message</key>
        <value>Welcome to my awesome app!</value>
    </entry>
</defaultsMap>
    <!-- END xml_defaults -->

驗證應用程式內預設值變更

  1. 在模擬器中執行專案,或使用測試裝置確認行為。
  2. 在 Java 或 Kotlin 版本中,按一下「Open」。

c1582b989c25ced.png

  1. 查看主要檢視畫面的歡迎訊息。

4c838bf5a629d5b8.png

在遠端設定後端設定參數值

現在來測試透過遠端設定傳送值吧。您可以使用 Firebase 控制台或 Remote Config 後端 API 建立新的伺服器端預設值,根據所需的條件邏輯或使用者指定目標覆寫應用程式內值。本節說明建立這些值的 Firebase 控制台步驟。

  1. 開啟 Firebase 控制台,開啟所需專案。
  2. 在「Engage」專區中,從左側選單中選取「Remote Config」,即可查看遠端設定資訊主頁。
  3. 在「Add a parameters」(新增參數) 下方,輸入 Parameter key.Default value 下方輸入所需文字。然後按一下「新增參數」。在本程式碼研究室中,我們會使用 res/xml/remote_config_defaults.xml 檔案中的參數鍵。詳情請參閱下表:

參數金鑰

預設值 (remote_config_defaults.xml)

說明

loading_phrase

正在擷取設定...

String;擷取遠端設定值時顯示。

welcome_message_caps

false

布林值;如為 true,則將 Welcome_message 變更為所有大寫

welcome_message

歡迎使用我的超棒應用程式!

String;歡迎訊息

螢幕截圖範例:

28fa48f18da43002.png

  1. 參數新增完畢後,按一下 [發布變更]。
  2. 再次在模擬器或裝置上執行應用程式,然後按一下「Fetch Remote Welcome」按鈕。

cfe900477549adb7.png

  1. 系統會根據您的遠端設定參數和值更新歡迎訊息!

6. 恭喜

恭喜,您已成功使用遠端設定變更歡迎訊息!遠端設定功能提供更多變更及自訂應用程式的方式。請參閱下列其他資源: