Mẫu Remote Config là tập hợp các điều kiện và thông số được định dạng JSON mà bạn đã tạo cho dự án Firebase của mình. Bạn có thể tạo mẫu máy khách (từ đó ứng dụng của bạn tìm nạp các giá trị) và mẫu máy chủ (từ đó máy khách máy chủ có thể tìm nạp các giá trị).
Phần này thảo luận về mẫu khách hàng. Để tìm hiểu về các mẫu dành riêng cho máy chủ, hãy nhấp vào Mẫu máy chủ.Bạn sửa đổi và quản lý mẫu bằng bảng điều khiển Firebase. Bảng điều khiển này sẽ hiển thị nội dung của mẫu ở định dạng đồ hoạ trong các thẻ Tham số và thẻ Điều kiện.
Bạn cũng có thể sử dụng Remote Config REST API và Admin SDK hoặc Firebase CLI để sửa đổi và quản lý mẫu ứng dụng khách.
Sau đây là ví dụ về một tệp mẫu phía máy chủ:
{
"parameters": {
"preamble_prompt": {
"defaultValue": {
"value": "You are a helpful assistant who knows everything there is to know about Firebase! "
},
"description": "Add this prompt to the user's prompt",
"valueType": "STRING"
},
"model_name": {
"defaultValue": {
"value": "gemini-pro-test"
},
"valueType": "STRING"
},
"generation_config": {
"defaultValue": {
"value": "{\"temperature\": 0.9, \"maxOutputTokens\": 2048, \"topP\": 0.9, \"topK\": 20}"
},
"valueType": "JSON"
},
},
"version": {
"versionNumber": "19",
"isLegacy": true
}
}
Bạn có thể thực hiện các tác vụ quản lý phiên bản này bằng bảng điều khiển Firebase:
- Liệt kê tất cả các phiên bản mẫu đã lưu trữ
- Truy xuất một phiên bản cụ thể
- Khôi phục về một phiên bản ứng dụng cụ thể
- Xoá mẫu Remote Config khỏi trang Nhật ký thay đổi
Tổng cộng có tối đa 300 phiên bản được lưu trữ trong suốt thời gian tồn tại cho mỗi loại mẫu (300 mẫu phía máy khách và 300 mẫu phía máy chủ), bao gồm cả số phiên bản được lưu trữ cho các mẫu đã bị xoá. Nếu bạn xuất bản hơn 300 phiên bản mẫu cho mỗi loại mẫu trong suốt thời gian tồn tại của một dự án, thì các phiên bản sớm nhất sẽ bị xoá, duy trì tối đa 300 phiên bản của loại đó.
Mỗi khi bạn cập nhật các tham số, Remote Config sẽ tạo một mẫu Remote Config mới có phiên bản và lưu trữ mẫu trước đó dưới dạng một phiên bản mà bạn có thể truy xuất hoặc quay lại khi cần. Số phiên bản được tăng tuần tự từ giá trị ban đầu do Remote Config lưu trữ.
Tất cả các mẫu đều có một trường version
như minh hoạ, chứa siêu dữ liệu về phiên bản cụ thể đó.
Bạn có thể xoá các mẫu Remote Config khi cần trên trang Nhật ký thay đổitrên bảng điều khiển Remote Config.
Quản lý các phiên bản mẫu Remote Config
Phần này mô tả cách quản lý các phiên bản của mẫu Remote Config.
Liệt kê tất cả các phiên bản đã lưu trữ của mẫu Remote Config
Bạn có thể truy xuất danh sách tất cả các phiên bản đã lưu của mẫu Remote Config. Để thực hiện việc này:
Firebase bảng điều khiển
Trong thẻ Thông số, hãy chọn biểu tượng "đồng hồ" xuất hiện ở trên cùng bên phải. Thao tác này sẽ mở trang Nhật ký thay đổi. Trang này liệt kê tất cả các phiên bản mẫu đã lưu trong một trình đơn danh sách ở bên phải.
Thông tin chi tiết được hiển thị cho từng phiên bản đã lưu trữ bao gồm thông tin về việc các thay đổi bắt nguồn từ Console, REST API, thao tác khôi phục hay là các thay đổi gia tăng từ thao tác lưu bắt buộc của mẫu.
Firebase CLI
firebase remoteconfig:versions:list
Sử dụng lựa chọn --limit
để giới hạn số lượng phiên bản được trả về.
Truyền "0" để tìm nạp tất cả các phiên bản.
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);
});
}
Java
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()); }
Kiến trúc chuyển trạng thái đại diện (REST)
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
Danh sách mẫu bao gồm siêu dữ liệu cho tất cả các phiên bản đã lưu trữ, bao gồm cả thời gian cập nhật, người dùng đã thực hiện và cách thực hiện. Sau đây là ví dụ về một phần tử phiên bản:
```json
{
"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"
}]
}
```
Truy xuất một phiên bản cụ thể của mẫu Remote Config
Bạn có thể truy xuất bất kỳ phiên bản cụ thể nào đã lưu trữ của mẫu Remote Config. Cách truy xuất một phiên bản mẫu đã lưu trữ:
Firebase bảng điều khiển
Theo mặc định, ngăn chi tiết trong thẻ Nhật ký thay đổi sẽ hiển thị mẫu đang hoạt động hiện tại. Để xem thông tin chi tiết của một phiên bản khác trong danh sách, hãy chọn phiên bản đó trong trình đơn bên phải.
Bạn có thể xem sự khác biệt chi tiết giữa phiên bản hiện đang chọn và bất kỳ phiên bản nào khác được lưu trữ bằng cách di chuột qua trình đơn theo bối cảnh cho bất kỳ phiên bản nào không được chọn rồi chọn So sánh với phiên bản đã chọn.
Firebase CLI
firebase remoteconfig:get -v VERSION_NUMBER
Bạn có thể ghi đầu ra vào một tệp đã chỉ định bằng -o, FILENAME
(không bắt buộc).
Node.js
Truyền getTemplate()
mà không có đối số nào để truy xuất phiên bản mới nhất của mẫu hoặc để truy xuất một phiên bản cụ thể, hãy dùng 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);
});
Java
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());
Kiến trúc chuyển trạng thái đại diện (REST)
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
Tham số URL ?version_number
chỉ hợp lệ cho các thao tác GET
; bạn không thể dùng tham số này để chỉ định số phiên bản cho các bản cập nhật. Một yêu cầu get tương tự mà không có tham số ?version_number
sẽ truy xuất mẫu đang hoạt động hiện tại.
Khôi phục về một phiên bản cụ thể đã lưu của mẫu Remote Config
Bạn có thể khôi phục về bất kỳ phiên bản nào đã lưu của mẫu. Cách khôi phục mẫu:
Firebase bảng điều khiển
Đối với các phiên bản mẫu trước đủ điều kiện khôi phục, một nút chọn để khôi phục về phiên bản đó sẽ xuất hiện ở trên cùng bên phải của trang Nhật ký thay đổi. Chỉ nhấp và xác nhận nếu bạn chắc chắn muốn quay lại phiên bản đó và sử dụng những giá trị đó ngay lập tức cho tất cả ứng dụng và người dùng.
Firebase CLI
firebase remoteconfig:rollback -v VERSION_NUMBER
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);
})
Java
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()); } }
Kiến trúc chuyển trạng thái đại diện (REST)
Để quay lại mẫu Remote Config đã lưu trữ, hãy gửi một yêu cầu HTTP POST bằng phương thức tuỳ chỉnh :rollback
và trong phần nội dung yêu cầu, hãy chỉ định phiên bản cụ thể cần áp dụng. Ví dụ:
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}'
Phản hồi chứa nội dung của mẫu đã lưu hiện đang hoạt động, cùng với siêu dữ liệu phiên bản mới của mẫu đó.
Xin lưu ý rằng thao tác khôi phục này sẽ tạo ra một phiên bản được đánh số mới. Ví dụ: việc quay lại từ phiên bản 10 về phiên bản 6 sẽ tạo ra một bản sao mới của phiên bản 6, chỉ khác với bản gốc ở chỗ số phiên bản là 11. Phiên bản 6 ban đầu vẫn được lưu trữ (giả sử chưa hết hạn) và phiên bản 11 sẽ trở thành mẫu đang hoạt động.
Xoá mẫu Remote Config
Bạn có thể xoá các mẫu Remote Config khỏi bảng điều khiển Firebase. Cách xoá mẫu Remote Config:
1. Trên trang Remote Config Thông số, hãy nhấp vào Nhật ký thay đổi.Chuyển đến mẫu bạn muốn xoá, nhấp vào biểu tượng
Tuỳ chọn khác, rồi chọn Xoá.Khi được nhắc xác nhận việc xoá, hãy nhấp vào Xoá.
Tải xuống và xuất bản mẫu Remote Config
Tải xuống và xuất bản các mẫu Remote Config để tích hợp chúng vào hệ thống kiểm soát nguồn và hệ thống tạo bản dựng, tự động hoá các bản cập nhật cấu hình, đồng thời giữ cho các thông số và giá trị luôn đồng bộ trên nhiều dự án.
Bạn có thể tải mẫu Remote Config hiện đang hoạt động xuống theo cách lập trìnhtừ bảng điều khiển Firebase. Sau đó, bạn có thể cập nhật tệp JSON đã xuất và xuất bản tệp đó vào cùng một dự án hoặc xuất bản tệp đó vào một dự án mới hoặc dự án hiện có.
Giả sử bạn có nhiều dự án đại diện cho các giai đoạn khác nhau trong vòng đời phát triển phần mềm, chẳng hạn như môi trường phát triển, kiểm thử, dàn dựng và phát hành công khai. Trong trường hợp này, bạn có thể quảng bá một mẫu đã được kiểm thử đầy đủ từ môi trường dàn dựng sang môi trường thực tế bằng cách tải mẫu đó xuống từ dự án dàn dựng và xuất bản mẫu đó sang dự án thực tế.
Bạn cũng có thể sử dụng phương thức này để di chuyển cấu hình từ dự án này sang dự án khác hoặc điền thông số và giá trị từ một dự án đã thiết lập vào một dự án mới.
Các tham số và giá trị tham số được tạo riêng dưới dạng biến thể trong một thử nghiệm A/B Testing sẽ không được đưa vào các mẫu đã xuất.
Cách xuất và nhập mẫu Remote Config:
- Tải Remote Config mẫu Cấu hình hiện tại xuống.
- Xác thực mẫu Remote Config.
- Xuất bản mẫu Remote Config.
Tải Mẫu cấu hình từ xa hiện tại xuống
Sử dụng nội dung sau để tải mẫu Remote Config đang hoạt động xuống ở định dạng JSON:
Firebase bảng điều khiển
- Trong thẻ Remote Config Parameters or Conditions (Tham số hoặc điều kiện), hãy mở Trình đơn rồi chọn Tải tệp cấu hình hiện tại xuống.
- Khi được nhắc, hãy nhấp vào Tải tệp cấu hình xuống, chọn vị trí bạn muốn lưu tệp, rồi nhấp vào Lưu.
Firebase CLI
firebase remoteconfig:get -o filename
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); }); }
Java
Template template = FirebaseRemoteConfig.getInstance().getTemplateAsync().get(); // See the ETag of the fetched template. System.out.println("ETag from server: " + template.getETag());
Kiến trúc chuyển trạng thái đại diện (REST)
curl --compressed -D headers -H "Authorization: Bearer token" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -o filename
Lệnh này xuất tải trọng JSON vào một tệp và các tiêu đề (bao gồm cả ETag) vào một tệp headers
riêng biệt.
Xác thực mẫu Cấu hình từ xa
Bạn có thể xác thực nội dung cập nhật mẫu trước khi xuất bản bằng cách sử dụng Firebase Admin SDK hoặc REST API. Các mẫu cũng được xác thực khi bạn tìm cách xuất bản từ CLI Firebase hoặc bảng điều khiển Firebase.Quy trình xác thực mẫu sẽ kiểm tra các lỗi như khoá trùng lặp cho các tham số và điều kiện, tên điều kiện không hợp lệ hoặc điều kiện không tồn tại, hoặc ETag bị định dạng sai. Ví dụ: một yêu cầu chứa nhiều hơn số lượng khoá được phép (2.000) sẽ trả về thông báo lỗi 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); }); }
Java
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()); } }
Kiến trúc chuyển trạng thái đại diện (REST)
Xác thực nội dung cập nhật mẫu bằng cách thêm tham số URL ?validate_only=true
vào yêu cầu xuất bản của bạn:
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
Nếu mẫu của bạn được xác thực thành công, lệnh curl sẽ trả về mẫu JSON mà bạn đã gửi và trong tệp headers
đã lưu, bạn sẽ thấy trạng thái HTTP/2 200 và ETag được cập nhật có hậu tố -0
. Nếu mẫu của bạn không được xác thực, bạn sẽ nhận được lỗi xác thực trong phản hồi JSON và tệp headers
của bạn sẽ chứa một phản hồi không phải 200 (và không có ETag).
Xuất bản mẫu Remote Config
Sau khi tải một mẫu xuống, thực hiện mọi thay đổi cần thiết đối với nội dung JSON và xác thực nội dung đó, bạn có thể xuất bản nội dung đó lên một dự án.
Việc xuất bản một mẫu sẽ thay thế toàn bộ mẫu cấu hình hiện có bằng tệp đã cập nhật và tăng phiên bản mẫu thêm một. Vì toàn bộ cấu hình sẽ được thay thế, nên nếu bạn xoá một thông số khỏi tệp JSON và xuất bản tệp đó, thì thông số sẽ bị xoá khỏi máy chủ và không còn được cung cấp cho các ứng dụng nữa.
Sau khi xuất bản, các thay đổi đối với thông số và giá trị sẽ có hiệu lực ngay lập tức đối với ứng dụng và người dùng của bạn. Nếu cần, bạn có thể khôi phục về một phiên bản trước.
Sử dụng các lệnh sau để xuất bản mẫu:
Firebase bảng điều khiển
- Trong thẻ Remote ConfigTham số hoặc Điều kiện, hãy mở Trình đơn rồi chọn Xuất bản từ một tệp.
- Khi được nhắc, hãy nhấp vào Duyệt qua, chuyển đến và chọn tệp Remote Config mà bạn muốn xuất bản, rồi nhấp vào Chọn.
- Tệp này sẽ được xác thực và nếu thành công, bạn có thể nhấp vào Phát hành để cung cấp ngay cấu hình cho các ứng dụng và người dùng của bạn.
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); }); }
Java
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()); } }
Kiến trúc chuyển trạng thái đại diện (REST)
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
Đối với lệnh curl
này, bạn có thể chỉ định nội dung bằng cách dùng ký tự "@", theo sau là tên tệp.
Remote Config và điều kiện cá nhân hoá được đưa vào các mẫu đã tải xuống, vì vậy, bạn cần lưu ý những hạn chế sau đây khi cố gắng xuất bản sang một dự án khác:
Bạn không thể nhập hoạt động cá nhân hoá từ dự án này sang dự án khác.
Ví dụ: nếu đã bật tính năng cá nhân hoá trong dự án và tải xuống cũng như chỉnh sửa một mẫu, bạn có thể xuất bản mẫu đó vào cùng dự án, nhưng không thể xuất bản vào một dự án khác, trừ phi bạn xoá tính năng cá nhân hoá khỏi mẫu.
Bạn có thể nhập các điều kiện từ dự án này sang dự án khác, nhưng lưu ý rằng mọi giá trị điều kiện cụ thể (chẳng hạn như mã ứng dụng hoặc đối tượng) phải có trong dự án mục tiêu trước khi xuất bản.
Ví dụ: nếu bạn có một tham số Remote Config sử dụng một điều kiện chỉ định giá trị nền tảng là
iOS
, thì bạn có thể xuất bản mẫu này sang một dự án khác vì giá trị nền tảng là như nhau đối với mọi dự án. Tuy nhiên, nếu điều kiện đó dựa vào một mã ứng dụng hoặc đối tượng người dùng cụ thể không có trong dự án mục tiêu, thì quá trình xác thực sẽ không thành công.Nếu mẫu mà bạn dự định xuất bản có chứa các điều kiện dựa trên Google Analytics, thì bạn phải bật Analytics trong dự án mục tiêu.
Tải mẫu Remote Config mặc định xuống
Vì ứng dụng của bạn có thể không phải lúc nào cũng kết nối với Internet, nên bạn phải định cấu hình các giá trị mặc định của ứng dụng phía máy khách cho tất cả các tham số Remote Config. Bạn cũng nên định kỳ đồng bộ hoá các giá trị mặc định của ứng dụng và các giá trị tham số mặc định của phần phụ trợ Remote Config, vì chúng có thể thay đổi theo thời gian.
Như mô tả trong các đường liên kết dành riêng cho nền tảng ở cuối phần này, bạn có thể đặt các giá trị mặc định này theo cách thủ công trong ứng dụng hoặc có thể đơn giản hoá quy trình này bằng cách tải các tệp xuống. Các tệp này chỉ chứa các cặp khoá-giá trị cho tất cả các tham số và giá trị mặc định của các tham số đó trong mẫu Remote Config đang hoạt động. Sau đó, bạn có thể đưa tệp này vào dự án và định cấu hình ứng dụng để nhập các giá trị này.
Bạn có thể tải các tệp này xuống ở định dạng XML cho ứng dụng Android, định dạng danh sách thuộc tính (plist) cho ứng dụng iOS và JSON cho ứng dụng web.
Bạn nên định kỳ tải các giá trị mặc định Remote Config xuống trước khi phát hành bất kỳ ứng dụng mới nào để đảm bảo ứng dụng của bạn và phần phụ trợ Remote Config luôn đồng bộ.
Cách tải tệp chứa các giá trị mặc định của mẫu xuống:
Kiến trúc chuyển trạng thái đại diện (REST)
curl --compressed -D headers -H "Authorization: Bearer token -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=file_format'
Sử dụng XML
, PLIST
hoặc JSON
làm giá trị format
, tuỳ thuộc vào định dạng tệp mà bạn muốn tải xuống.
Firebase bảng điều khiển
- Trong thẻ Parameters (Thông số), hãy mở Trình đơn rồi chọn Tải giá trị mặc định xuống.
- Khi được nhắc, hãy nhấp vào nút chọn tương ứng với định dạng tệp bạn muốn tải xuống, rồi nhấp vào Tải tệp xuống.
Để biết thêm thông tin về cách nhập giá trị mặc định Remote Config vào ứng dụng, hãy xem: