Firebase Remote Config 可讓您靈活控管應用程式的行為和外觀。這樣一來,您不必部署新版本或處理多個應用程式商店的更新,就能為應用程式啟用功能推出和跨平台 A/B 測試等功能。
無論您是進行原型設計、經營新創公司,還是大規模管理企業應用程式,管理網路擷取量都是提供快速回應使用者體驗的關鍵。有效管理設定可減少冷啟動延遲、節省用戶端資料和電池用量,並避免不必要的網路負擔。此外,如果使用者人數快速增加,導致日後用量提高,簡化 Remote Config 整合程序有助於確保用量維持在有效率的範圍內。
您可以調整應用程式擷取參數的時間和方式,以及啟用參數的時間,大幅減少用戶端網路要求流量。
改用「擷取下一個工作階段」模式
要避免的常見模式是,在每次啟動應用程式時,都使用 fetchAndActivate 呼叫 (透過網路擷取新值並啟用),並搭配先前擷取值的短暫快取到期時間 (例如 15 分鐘到 1 小時)。這種做法背後的心理模型是,使用者每次開啟應用程式時,系統都會擷取並套用最新值。雖然有時必須立即更新 (例如執行每日銷售活動或遊戲宣傳活動),但請務必兼顧這項目標,以及對應用程式成效和擷取用量的影響。
這種做法會在快取過期時強制發出新的網路呼叫,因此對於每天多次開啟應用程式的使用者來說,擷取量會很高。
請改為分開使用 fetch 和 activate 呼叫,並採用較高的最低擷取間隔,以採用「為下一個工作階段擷取」模型。您仍可搭配較高的最短擷取間隔使用 fetchAndActivate,因為 fetch 只會在快取失效時執行網路要求,但分開使用這兩項呼叫有助於鞏固模式,並在應用程式開發程序中將其確立為標準做法。此外,分開啟用可避免在工作階段中途套用設定值,進而影響使用者體驗。
這個方法的運作方式
- 在啟動時立即啟用:立即套用從上一個工作階段快取的設定 (0 毫秒網路延遲)。
- 在背景擷取較長的快取 (例如超過 12 或 24 小時):非同步要求更新設定,以重新整理下一個工作階段的本機快取。
這項功能如何最佳化擷取量
如果擷取間隔下限較長,擷取要求就會較少。為下一個工作階段擷取新值,並為目前工作階段啟用快取值,表示應用程式會在較長的驗證期間內,從本機快取立即載入,進而提升使用者體驗。
舉例來說,如果將 minimumFetchInterval 設為 24 小時,而使用者在一天內開啟應用程式 5 或 10 次,SDK 會直接從本機快取滿足啟動 2 到 10 次的要求,將該使用者每天的網路要求次數從 10 次以上減少至 1 次。
以下範例說明 Android、Apple 平台和網頁應用程式的實作方式:
Android
val remoteConfig = Firebase.remoteConfig // Set a 24-hour minimum fetch interval (86,400 seconds) val configSettings = remoteConfigSettings { minimumFetchIntervalInSeconds = 86400 } remoteConfig.setConfigSettingsAsync(configSettings) // 1. Instantly activate values cached from the LAST session remoteConfig.activate().addOnCompleteListener { applyAppConfigurations() } // 2. Fetch new values in the background for the NEXT session remoteConfig.fetch().addOnCompleteListener { task -> if (task.isSuccessful) { // Optional: Activate values if needed } }
iOS+
let remoteConfig = RemoteConfig.remoteConfig() // Set a 24-hour minimum fetch interval (86,400 seconds) let settings = RemoteConfigSettings() settings.minimumFetchInterval = 86400 remoteConfig.configSettings = settings // 1. Instantly activate values cached from the LAST session remoteConfig.activate { changed, error in guard error == nil else { return } DispatchQueue.main.async { self.applyAppConfigurations() } } // 2. Fetch new values in the background for the NEXT session remoteConfig.fetch { status, error in if status == .success { // Optional: Activate values if needed } }
網頁
import { getRemoteConfig, fetchConfig, activate } from "firebase/remote-config"; const remoteConfig = getRemoteConfig(app); // Set a 24-hour minimum fetch interval (86,400,000 ms) remoteConfig.settings.minimumFetchIntervalMillis = 86400000; // 1. Instantly activate values cached from the LAST session activate(remoteConfig).then(() => { applyAppConfigurations(); }); // 2. Fetch new values in the background for the NEXT session fetchConfig(remoteConfig).then(() => { // Optional: Activate values if needed });
實作有條件的「智慧」擷取作業
如果「為下一個工作階段擷取」模式在您需要更新 Remote Config 值,以及這些值在用戶端應用程式中可用之間,造成過多延遲,請考慮採用條件式「智慧」擷取。
如要有效實作這項功能,請避免將 fetch 觸發程序附加至廣泛的 UI 生命週期掛鉤,例如每次載入畫面、切換分頁或檢視畫面取得焦點時。
請改為根據明確的應用程式動作或狀態,選擇性地觸發擷取要求,例如:
- 使用者登入事件
- 轉換為使用參數的特定使用者流程 (例如進入結帳漏斗或在遊戲中升級)
反之,請避免觸發例行動作的擷取要求,例如:
- 使用者開啟應用程式或啟動新工作階段時
- 應用程式在背景和前景狀態之間轉換時