遠程配置模板是您為 Firebase 項目創建的服務器端 JSON 格式的參數和條件集。您可以使用 Firebase 控制台修改和管理模板,該控制台在“參數”和“條件”選項卡中以圖形格式顯示模板的內容。您還可以使用遠程配置後端 API或Firebase CLI來修改和管理您的配置。
以下是模板文件的示例:
{
"conditions": [
{
"name": "ios",
"expression": "device.os == 'ios'"
}
],
"parameters": {
"welcome_message": {
"defaultValue": {
"value": "Welcome to this sample app"
},
"conditionalValues": {
"ios": {
"value": "Welcome to this sample iOS app"
}
}
},
"welcome_message_caps": {
"defaultValue": {
"value": "false"
}
},
"header_text": {
"defaultValue": {
"useInAppDefault": true
}
}
},
"version": {
"versionNumber": "28",
"updateTime": "2020-05-14T18:39:38.994Z",
"updateUser": {
"email": "user@google.com"
},
"updateOrigin": "CONSOLE",
"updateType": "INCREMENTAL_UPDATE"
}
}
每次更新參數時,遠程配置都會創建一個新版本的遠程配置模板,並將以前的模板存儲為您可以根據需要檢索或回滾到的版本。版本號從遠程配置存儲的初始值開始按順序遞增。所有模板都包含一個version
字段,如圖所示,其中包含有關該特定版本的元數據。
使用 Firebase 控制台、Firebase CLI 或遠程配置後端 API,您可以執行以下版本管理任務:
- 列出所有存儲的模板版本
- 檢索特定版本
- 回滾到特定版本
當您管理遠程配置模板時,請記住過期閾值:您的應用程序使用的當前活動遠程配置模板不會過期;但是,如果被更新替換,則之前的版本只會存儲 90 天,之後就會過期且無法檢索。存儲版本的總限制為 300 個。如果您想要存儲或回滾到這些限制之外的模板,請手動保存並存儲它。
管理遠程配置模板版本
本節介紹如何管理遠程配置模板的版本。有關如何以編程方式創建、修改和保存模板的更多詳細信息,請參閱以編程方式修改遠程配置。
列出遠程配置模板的所有存儲版本
您可以檢索遠程配置模板的所有存儲版本的列表。例如:
Node.js
function listAllVersions() {
admin.remoteConfig().listVersions()
.then((listVersionsResult) => {
console.log("Successfully fetched the list of versions");
listVersionsResult.versions.forEach((version) => {
console.log('version', JSON.stringify(version));
});
})
.catch((error) => {
console.log(error);
});
}
爪哇
ListVersionsPage page = FirebaseRemoteConfig.getInstance().listVersionsAsync().get(); while (page != null) { for (Version version : page.getValues()) { System.out.println("Version: " + version.getVersionNumber()); } page = page.getNextPage(); } // Iterate through all versions. This will still retrieve versions in batches. page = FirebaseRemoteConfig.getInstance().listVersionsAsync().get(); for (Version version : page.iterateAll()) { System.out.println("Version: " + version.getVersionNumber()); }
休息
curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig:listVersions
Firebase 控制台
在“參數”選項卡中,選擇右上角顯示的“時鐘”圖標。這將打開“更改歷史記錄”頁面,在右側的列表菜單中列出所有存儲的模板版本。
為每個存儲的版本顯示的詳細信息包括有關更改是否源自控制台、REST API、回滾的信息,或者是否是強制保存模板的增量更改的信息。
Firebase CLI
firebase remoteconfig:versions:list
使用--limit
選項來限制返回的版本數量。傳遞“0”以獲取所有版本。
模板列表包含所有存儲版本的元數據,包括更新時間、更新的用戶以及更新是通過控制台還是 REST API 進行的。以下是版本元素的示例:
{
"versions": [{
"version_number": "6",
"update_time": "2022-05-12T02:38:54Z",
"update_user": {
"name": "Jane Smith",
"email": "jane@developer.org",
"imageUrl": "https://lh3.googleusercontent.com/a-/..."
},
"description": "One small change on the console",
"origin": "CONSOLE",
"update_type": "INCREMENTAL_UPDATE"
}]
檢索遠程配置模板的特定版本
您可以檢索遠程配置模板的任何特定存儲版本。例如:
Node.js
傳遞不帶任何參數的getTemplate()
來檢索模板的最新版本,或者要檢索特定版本,請使用getTemplateAtVersion()
。
// Get template version: 6
admin.remoteConfig().getTemplateAtVersion('6')
.then((template) => {
console.log("Successfully fetched the template with ETag: " + template.etag);
})
.catch((error) => {
console.log(error);
});
爪哇
Template template = FirebaseRemoteConfig.getInstance().getTemplateAtVersionAsync(versionNumber).get(); // See the ETag of the fetched template. System.out.println("Successfully fetched the template with ETag: " + template.getETag());
休息
curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig?version_number=6
URL參數?version_number
僅對GET
操作有效;您不能使用它來指定更新的版本號。不帶?version_number
參數的類似 get 請求將檢索當前活動模板。
Firebase 控制台
默認情況下, “更改歷史記錄”選項卡中的詳細信息窗格顯示當前活動模板。要查看列表中其他版本的詳細信息,請從右側菜單中選擇它。
您可以通過將鼠標懸停在任何未選定版本的上下文菜單上並選擇與選定版本進行比較來查看當前選定版本和任何其他存儲版本的詳細差異。
Firebase CLI
firebase remoteconfig:get -v VERSION_NUMBER
或者,您可以使用-o, FILENAME
將輸出寫入指定文件。
回滾到遠程配置模板的特定存儲版本
您可以回滾到模板的任何存儲版本。例如:
Node.js
// Roll back to template version: 6
admin.remoteConfig().rollback('6')
.then((template) => {
console.log("Successfully rolled back to template version 6.");
console.log("New ETag: " + template.etag);
})
.catch((error) => {
console.log('Error trying to rollback:', e);
})
爪哇
try { Template template = FirebaseRemoteConfig.getInstance().rollbackAsync(versionNumber).get(); System.out.println("Successfully rolled back to template version: " + versionNumber); System.out.println("New ETag: " + template.getETag()); } catch (ExecutionException e) { if (e.getCause() instanceof FirebaseRemoteConfigException) { FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause(); System.out.println("Error trying to rollback template."); System.out.println(rcError.getMessage()); } }
休息
要回滾到存儲的遠程配置模板,請使用自定義方法:rollback
發出 HTTP POST,並在請求正文中發出要應用的特定版本。例如:
curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -H "Content-Type: application/json" -X POST https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig:rollback -d '{"version_number": 6}'
響應包含當前活動的存儲模板的內容及其新版本元數據。
Firebase 控制台
對於符合回滾條件的先前模板版本, “更改歷史記錄”頁面的右上角會顯示用於回滾到該版本的選項按鈕。僅當您確定要回滾到該版本並立即對所有應用程序和用戶使用這些值時,才單擊並確認。
Firebase CLI
firebase remoteconfig:rollback -v VERSION_NUMBER
請注意,此回滾操作實際上創建了一個新的編號版本。例如,從版本 10 回滾到版本 6 會有效地創建版本 6 的新副本,與原始版本的不同之處僅在於其版本號為 11。原始版本 6 仍會被存儲,假設它尚未到期,並且版本11 成為活動模板。
刪除遠程配置模板
您可以從 Firebase 控制台刪除遠程配置模板。要刪除遠程配置模板:
下載並發布遠程配置模板
下載並發布遠程配置模板,將其集成到源代碼管理和構建系統中,自動更新配置,並在多個項目之間保持參數和值同步。
您可以通過編程方式或從 Firebase 控制台下載當前活動的遠程配置模板。然後,您可以更新導出的 JSON 文件並將其發佈到同一項目,或者將其發佈到新的或現有的項目。
假設您有多個項目,它們代表軟件開發生命週期的不同階段,例如開發、測試、登台和生產環境。在這種情況下,您可以通過從暫存項目下載經過全面測試的模板並將其發佈到生產項目,將其從暫存環境提升到生產環境。
您還可以使用此方法將配置從一個項目遷移到另一個項目,或者使用已建立項目中的參數和值填充新項目。
在 A/B 測試實驗中專門作為變體創建的參數和參數值不包含在導出的模板中。
要導出和導入遠程配置模板:
下載當前的遠程配置模板
您可以通過編程方式或使用 Firebase 控制台下載當前有效的遠程配置模板。
使用以下命令以 JSON 格式下載活動的遠程配置模板:
Node.js
function getTemplate() { var config = admin.remoteConfig(); config.getTemplate() .then(function (template) { console.log('ETag from server: ' + template.etag); var templateStr = JSON.stringify(template); fs.writeFileSync('config.json', templateStr); }) .catch(function (err) { console.error('Unable to get template'); console.error(err); }); }
爪哇
Template template = FirebaseRemoteConfig.getInstance().getTemplateAsync().get(); // See the ETag of the fetched template. System.out.println("ETag from server: " + template.getETag());
休息
curl --compressed -D headers -H "Authorization: Bearer token" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -o filename
此命令將 JSON 負載輸出到一個文件,並將標頭(包括 ETag)輸出到一個單獨的headers
文件。
Firebase 控制台
- 從遠程配置參數或條件選項卡中,打開 菜單,然後選擇下載當前配置文件。
- 出現提示時,單擊“下載配置文件” ,選擇要保存文件的位置,然後單擊“保存” 。
Firebase CLI
firebase remoteconfig:get -o filename
驗證遠程配置模板
您可以在發布模板更新之前使用 Firebase Admin SDK 或 REST API 驗證模板更新。當您嘗試從 Firebase CLI 或 Firebase 控制台發佈時,也會驗證模板。
模板驗證過程會檢查錯誤,例如參數和條件的重複鍵、無效的條件名稱或不存在的條件或格式錯誤的 ETag。例如,包含超過允許數量的鍵(2000)的請求將返回錯誤消息Param count too large
。
Node.js
function validateTemplate(template) { admin.remoteConfig().validateTemplate(template) .then(function (validatedTemplate) { // The template is valid and safe to use. console.log('Template was valid and safe to use'); }) .catch(function (err) { console.error('Template is invalid and cannot be published'); console.error(err); }); }
爪哇
try { Template validatedTemplate = FirebaseRemoteConfig.getInstance() .validateTemplateAsync(template).get(); System.out.println("Template was valid and safe to use"); } catch (ExecutionException e) { if (e.getCause() instanceof FirebaseRemoteConfigException) { FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause(); System.out.println("Template is invalid and cannot be published"); System.out.println(rcError.getMessage()); } }
休息
通過將 URL 參數?validate_only=true
附加到您的發布請求來驗證模板更新:
curl --compressed -H "Content-Type: application/json; UTF8" -H "If-Match: last-returned-etag" -H "Authorization: Bearer token" -X PUT https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig?validate_only=true -d @filename
如果您的模板已成功驗證,curl 命令將返回您提交的 JSON 模板,並且在保存的headers
文件中,您將找到 HTTP/2 狀態 200 和後綴為-0
的更新的 ETag。如果您的模板未經驗證,您將在 JSON 響應中收到驗證錯誤,並且headers
文件將包含非 200 響應(並且沒有 ETag)。
發布遠程配置模板
下載模板、對 JSON 內容進行任何必要的更改並驗證後,您可以將其發佈到項目。
發布模板會將整個現有配置模板替換為更新的文件,並將模板版本增加 1。由於整個配置都會被替換,因此如果您從 JSON 文件中刪除某個參數並將其發布,該參數將從服務器中刪除,並且不再可供客戶端使用。
發布後,您的應用程序和用戶可以立即使用對參數和值的更改。如有必要,您可以回滾到以前的版本。
使用以下命令發布您的模板:
Node.js
function publishTemplate() { var config = admin.remoteConfig(); var template = config.createTemplateFromJSON( fs.readFileSync('config.json', 'UTF8')); config.publishTemplate(template) .then(function (updatedTemplate) { console.log('Template has been published'); console.log('ETag from server: ' + updatedTemplate.etag); }) .catch(function (err) { console.error('Unable to publish template.'); console.error(err); }); }
爪哇
try { Template publishedTemplate = FirebaseRemoteConfig.getInstance() .publishTemplateAsync(template).get(); System.out.println("Template has been published"); // See the ETag of the published template. System.out.println("ETag from server: " + publishedTemplate.getETag()); } catch (ExecutionException e) { if (e.getCause() instanceof FirebaseRemoteConfigException) { FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause(); System.out.println("Unable to publish template."); System.out.println(rcError.getMessage()); } }
休息
curl --compressed -H "Content-Type: application/json; UTF8" -H "If-Match: last-returned-etag" -H "Authorization: Bearer token" -X PUT https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -d @filename
對於此curl
命令,您可以使用“@”字符後跟文件名來指定內容。
Firebase 控制台
- 從遠程配置參數或條件選項卡中,打開 菜單,然後選擇從文件發布。
- 出現提示時,單擊瀏覽,導航到並選擇要發布的遠程配置文件,然後單擊選擇。
- 該文件將被驗證,如果成功,您可以單擊“發布”以使配置立即可供您的應用程序和用戶使用。
遠程配置個性化設置和條件包含在下載的模板中,因此在嘗試發佈到其他項目時,請務必注意以下限制:
個性化設置無法從一個項目導入到另一個項目。
例如,如果您在項目中啟用了個性化設置並下載並編輯了模板,則可以將其發佈到同一項目,但無法將其發佈到其他項目,除非從模板中刪除個性化設置。
可以將條件從一個項目導入到另一個項目,但請注意,任何特定的條件值(例如應用程序 ID 或受眾)在發布之前都應存在於目標項目中。
例如,如果您有一個遠程配置參數,該參數使用指定平台值
iOS
的條件,則可以將模板發佈到另一個項目,因為任何項目的平台值都是相同的。但是,如果它包含依賴於目標項目中不存在的特定應用 ID 或用戶受眾的條件,則驗證將失敗。如果您計劃發布的模板包含依賴於 Google Analytics 的條件,則必須在目標項目中啟用 Analytics。
下載遠程配置模板默認值
由於您的應用程序可能並不總是連接到 Internet,因此您應該為所有遠程配置參數配置客戶端應用程序默認值。您還應該定期同步應用程序客戶端默認值和遠程配置後端默認參數值,因為它們可能會隨著時間的推移而發生變化。
如本節末尾的特定於平台的鏈接中所述,您可以在應用程序中手動設置這些默認值,也可以通過下載僅包含所有參數的鍵值對及其默認值的文件來簡化此過程。活動遠程配置模板。然後,您可以將此文件包含在您的項目中,並配置您的應用程序以導入這些值。
對於 Android 應用程序,您可以下載 XML 格式的文件;對於 iOS 應用程序,您可以下載屬性列表 (plist) 格式的文件;對於 Web 應用程序,您可以下載 JSON 格式的文件。
我們建議在發布任何新應用程序之前定期下載遠程配置默認值,以確保您的應用程序和遠程配置後端保持同步。
要下載包含模板默認值的文件:
休息
curl --compressed -D headers -H "Authorization: Bearer token -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=file_format'
使用XML
、 PLIST
或JSON
作為format
值,具體取決於您要下載的文件格式。
Firebase 控制台
- 在“參數”選項卡中,打開 菜單,然後選擇“下載默認值” 。
- 出現提示時,單擊與要下載的文件格式相對應的單選按鈕,然後單擊“下載文件” 。
有關將遠程配置默認值導入應用程序的更多信息,請參閱: