เอกสารนี้จะอธิบายวิธีอ่านและแก้ไขชุดพารามิเตอร์และเงื่อนไขรูปแบบ JSON แบบเป็นโปรแกรม ซึ่งเรียกว่าเทมเพลต Remote Config ซึ่งจะช่วยให้คุณทำการเปลี่ยนแปลงเทมเพลตในแบ็กเอนด์ที่แอปไคลเอ็นต์สามารถดึงข้อมูลได้โดยใช้ไลบรารีไคลเอ็นต์
เมื่อใช้ Remote Config REST API หรือ Admin SDK ที่อธิบายไว้ในคู่มือนี้ คุณสามารถข้ามการจัดการเทมเพลตในคอนโซล Firebase เพื่อผสานรวมการเปลี่ยนแปลงของ Remote Config เข้ากับกระบวนการของคุณเองได้โดยตรง ตัวอย่างเช่น เมื่อใช้ API แบ็กเอนด์ Remote Config คุณจะทําสิ่งต่อไปนี้ได้
- กำหนดเวลาการอัปเดตRemote Config เมื่อใช้การเรียก API ร่วมกับงาน cron คุณสามารถเปลี่ยนค่า Remote Config ได้ตามกำหนดการปกติ
- นําเข้าค่าการกําหนดค่าแบบเป็นกลุ่มเพื่อเปลี่ยนจากระบบที่เป็นกรรมสิทธิ์ของคุณเองไปยัง Firebase Remote Config อย่างมีประสิทธิภาพ
ใช้ Remote Config กับ Cloud Functions for Firebase ซึ่งจะเปลี่ยนค่าในแอปตามเหตุการณ์ที่เกิดขึ้นฝั่งเซิร์ฟเวอร์ เช่น คุณสามารถใช้ Remote Config เพื่อโปรโมตฟีเจอร์ใหม่ในแอป แล้วปิดการโปรโมตนั้นโดยอัตโนมัติเมื่อตรวจพบว่ามีคนโต้ตอบกับฟีเจอร์ใหม่มากพอ
ส่วนต่อไปนี้ของคู่มือนี้จะอธิบายการดำเนินการที่คุณทำได้กับ Remote Configแบ็กเอนด์ API หากต้องการตรวจสอบโค้ดบางส่วนที่ทํางานเหล่านี้ผ่าน REST API โปรดดูแอปตัวอย่างต่อไปนี้
- คู่มือเริ่มต้นใช้งานด่วน Java สําหรับ Firebase Remote Config REST API
- เริ่มต้นใช้งาน Firebase Remote Config REST API ด้วย Node.js
- คู่มือเริ่มต้นใช้งานฉบับย่อของ Firebase Remote Config REST API ใน Python
แก้ไขการกําหนดค่าระยะไกลโดยใช้ Firebase Admin SDK
Admin SDK คือชุดไลบรารีเซิร์ฟเวอร์ที่ช่วยให้คุณโต้ตอบกับ Firebase จากสภาพแวดล้อมที่มีสิทธิ์ นอกจากการอัปเดตRemote Configแล้ว Admin SDKยังช่วยให้สร้างและยืนยันโทเค็นการตรวจสอบสิทธิ์ Firebase, อ่านและเขียนจาก Realtime Database และอื่นๆ ได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับAdmin SDKข้อกําหนดและการตั้งค่าเบื้องต้นได้ที่หัวข้อเพิ่ม Firebase Admin SDK ลงในเซิร์ฟเวอร์
ในขั้นตอน Remote Config ทั่วไป คุณอาจได้รับเทมเพลตปัจจุบัน แก้ไขพารามิเตอร์หรือกลุ่มพารามิเตอร์และเงื่อนไขบางรายการ ตรวจสอบเทมเพลต แล้วเผยแพร่ คุณต้องให้สิทธิ์คำขอจาก SDK ก่อนทำการเรียก API
เริ่มต้น SDK และให้สิทธิ์คําขอ API
เมื่อคุณเริ่มต้น Admin SDK โดยไม่มีพารามิเตอร์ SDK จะใช้ข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน Google และอ่านตัวเลือกจากตัวแปรสภาพแวดล้อม FIREBASE_CONFIG
หากเนื้อหาของตัวแปร FIREBASE_CONFIG
ขึ้นต้นด้วย {
ระบบจะแยกวิเคราะห์เป็นออบเจ็กต์ JSON มิเช่นนั้น SDK จะถือว่าสตริงนั้นเป็นชื่อไฟล์ JSON ที่มีตัวเลือก
เช่น
Node.js
const admin = require('firebase-admin'); admin.initializeApp();
Java
FileInputStream serviceAccount = new FileInputStream("service-account.json"); FirebaseOptions options = FirebaseOptions.builder() .setCredentials(GoogleCredentials.fromStream(serviceAccount)) .build(); FirebaseApp.initializeApp(options);
รับเทมเพลตการกําหนดค่าระยะไกลปัจจุบัน
เมื่อใช้เทมเพลต Remote Config โปรดทราบว่าเทมเพลตมีเวอร์ชัน และแต่ละเวอร์ชันมีอายุการใช้งานจำกัดนับจากเวลาที่สร้างขึ้นจนถึงเวลาที่คุณแทนที่ด้วยอัปเดต ซึ่งก็คือ 90 วัน โดยมีขีดจํากัดทั้งหมด 300 เวอร์ชันที่เก็บไว้ ดูข้อมูลเพิ่มเติมได้ที่เทมเพลตและการกำหนดเวอร์ชัน
คุณสามารถใช้แบ็กเอนด์ API เพื่อรับเทมเพลต Remote Config เวอร์ชันที่ใช้งานอยู่ในปัจจุบันในรูปแบบ JSON
พารามิเตอร์และค่าพารามิเตอร์ที่สร้างเป็นตัวแปรโดยเฉพาะในการทดสอบ A/B Testing จะไม่รวมอยู่ในเทมเพลตที่ส่งออก
วิธีรับเทมเพลต
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());
แก้ไขพารามิเตอร์การกําหนดค่าระยะไกล
คุณสามารถแก้ไขและเพิ่มพารามิเตอร์ Remote Config และกลุ่มพารามิเตอร์แบบเป็นโปรแกรมได้ ตัวอย่างเช่น คุณอาจเพิ่มพารามิเตอร์เพื่อควบคุมการแสดงข้อมูลตามฤดูกาลในกลุ่มพารามิเตอร์ที่มีอยู่ชื่อ "new_menu" ดังนี้
Node.js
function addParameterToGroup(template) { template.parameterGroups['new_menu'].parameters['spring_season'] = { defaultValue: { useInAppDefault: true }, description: 'spring season menu visibility.', }; }
Java
template.getParameterGroups().get("new_menu").getParameters() .put("spring_season", new Parameter() .setDefaultValue(ParameterValue.inAppDefault()) .setDescription("spring season menu visibility.") );
API ช่วยให้คุณสร้างพารามิเตอร์และกลุ่มพารามิเตอร์ใหม่ หรือแก้ไขค่าเริ่มต้น ค่าแบบมีเงื่อนไข และคำอธิบายได้ ในทุกกรณี คุณต้องเผยแพร่เทมเพลตอย่างชัดเจนหลังจากทําการแก้ไข
แก้ไขเงื่อนไขการกําหนดค่าระยะไกล
คุณจะแก้ไขและเพิ่มเงื่อนไข Remote Config รวมถึงค่าแบบมีเงื่อนไขได้แบบเป็นโปรแกรม เช่น หากต้องการเพิ่มเงื่อนไขใหม่ ให้ทำดังนี้
Node.js
function addNewCondition(template) { template.conditions.push({ name: 'android_en', expression: 'device.os == \'android\' && device.country in [\'us\', \'uk\']', tagColor: 'BLUE', }); }
Java
template.getConditions().add(new Condition("android_en", "device.os == 'android' && device.country in ['us', 'uk']", TagColor.BLUE));
ในทุกกรณี คุณจะต้องเผยแพร่เทมเพลตอย่างชัดแจ้งหลังจากทำการแก้ไข
Remote Configแบ็กเอนด์ API มีเงื่อนไขและโอเปอเรเตอร์การเปรียบเทียบหลายรายการที่คุณสามารถใช้เพื่อเปลี่ยนลักษณะการทำงานและลักษณะที่ปรากฏของแอป ดูข้อมูลเพิ่มเติมเกี่ยวกับเงื่อนไขและโอเปอเรเตอร์ที่รองรับสำหรับเงื่อนไขเหล่านี้ได้ที่ข้อมูลอ้างอิงนิพจน์เงื่อนไข
ตรวจสอบความถูกต้องของเทมเพลตการกำหนดค่าระยะไกล
คุณตรวจสอบการอัปเดตก่อนเผยแพร่ได้ (ไม่บังคับ) ดังที่แสดง
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()); } }
กระบวนการตรวจสอบนี้จะตรวจสอบข้อผิดพลาดต่างๆ เช่น คีย์ที่ซ้ำกันสําหรับพารามิเตอร์และเงื่อนไข ชื่อเงื่อนไขที่ไม่ถูกต้องหรือเงื่อนไขที่ไม่มีอยู่ หรือแท็กที่มีรูปแบบไม่ถูกต้อง
ตัวอย่างเช่น คำขอที่มีจำนวนคีย์มากกว่าที่อนุญาต ซึ่งก็คือ 2000 คีย์จะแสดงผลข้อความแสดงข้อผิดพลาด Param count too large
เผยแพร่เทมเพลตการกําหนดค่าระยะไกล
เมื่อคุณดึงข้อมูลเทมเพลตและแก้ไขโดยมีการอัปเดตที่ต้องการแล้ว คุณก็เผยแพร่เทมเพลตได้ การเผยแพร่เทมเพลตตามที่อธิบายในส่วนนี้จะแทนที่ไฟล์ที่อัปเดตแล้วกับเทมเพลตการกําหนดค่าที่มีอยู่ทั้งหมด และเทมเพลตใหม่ที่ใช้งานอยู่จะได้รับการกำหนดหมายเลขเวอร์ชันที่มากกว่าเทมเพลตที่แทนที่ 1 หมายเลข
หากจำเป็น คุณสามารถใช้ REST API เพื่อย้อนกลับไปยังเวอร์ชันก่อนหน้าได้ คุณสามารถตรวจสอบก่อนเผยแพร่เพื่อลดความเสี่ยงที่จะเกิดข้อผิดพลาดในการอัปเดต
Remote Config การปรับเฉพาะบุคคลและเงื่อนไขจะรวมอยู่ในเทมเพลตที่ดาวน์โหลด ดังนั้นคุณจึงควรทราบข้อจำกัดต่อไปนี้เมื่อพยายามเผยแพร่ไปยังโปรเจ็กต์อื่น
ไม่สามารถนําเข้าการปรับให้เหมาะกับผู้ใช้แต่ละรายจากโปรเจ็กต์หนึ่งไปยังอีกโปรเจ็กต์หนึ่งได้
ตัวอย่างเช่น หากเปิดใช้การปรับตามโปรไฟล์ผู้ใช้ในโปรเจ็กต์และดาวน์โหลดและแก้ไขเทมเพลต คุณจะเผยแพร่เทมเพลตนั้นในโปรเจ็กต์เดียวกันได้ แต่จะเผยแพร่ในโปรเจ็กต์อื่นไม่ได้ เว้นแต่คุณจะลบการปรับตามโปรไฟล์ผู้ใช้ออกจากเทมเพลต
คุณสามารถนําเข้าเงื่อนไขจากโปรเจ็กต์หนึ่งไปยังอีกโปรเจ็กต์หนึ่งได้ แต่โปรดทราบว่าค่าแบบมีเงื่อนไขที่เฉพาะเจาะจง (เช่น รหัสแอปหรือกลุ่มเป้าหมาย) ควรอยู่ในโปรเจ็กต์เป้าหมายก่อนเผยแพร่
ตัวอย่างเช่น หากคุณมีพารามิเตอร์ Remote Config ที่ใช้เงื่อนไขที่ระบุค่าแพลตฟอร์มเป็น
iOS
คุณจะเผยแพร่เทมเพลตไปยังโปรเจ็กต์อื่นได้ เนื่องจากค่าแพลตฟอร์มเหมือนกันสำหรับทุกโปรเจ็กต์ อย่างไรก็ตาม หากเงื่อนไขใช้รหัสแอปหรือกลุ่มเป้าหมายของผู้ใช้ที่เฉพาะเจาะจงซึ่งไม่มีอยู่ในโปรเจ็กต์เป้าหมาย การยืนยันจะดำเนินการไม่สำเร็จหากเทมเพลตที่วางแผนจะเผยแพร่มีเงื่อนไขที่อาศัย Google Analytics คุณต้องเปิดใช้ Analytics ในโปรเจ็กต์เป้าหมาย
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()); } }
แก้ไขการกำหนดค่าระยะไกลโดยใช้ REST API
ส่วนนี้จะอธิบายความสามารถหลักของ Remote Config REST API ที่ https://firebaseremoteconfig.googleapis.com
โปรดดูรายละเอียดทั้งหมดที่หัวข้อข้อมูลอ้างอิง API
รับโทเค็นการเข้าถึงเพื่อตรวจสอบสิทธิ์และให้สิทธิ์คําขอ API
โปรเจ็กต์ Firebase รองรับบัญชีบริการของ Google ซึ่งคุณใช้เรียก API ของเซิร์ฟเวอร์ Firebase จากเซิร์ฟเวอร์แอปหรือสภาพแวดล้อมที่เชื่อถือได้ หากคุณกำลังพัฒนาโค้ดในเครื่องหรือติดตั้งใช้งานแอปพลิเคชันภายในองค์กร คุณสามารถใช้ข้อมูลเข้าสู่ระบบที่ได้รับผ่านบัญชีบริการนี้เพื่อให้สิทธิ์คําขอของเซิร์ฟเวอร์ได้
หากต้องการตรวจสอบสิทธิ์บัญชีบริการและให้สิทธิ์เข้าถึงบริการ Firebase คุณต้องสร้างไฟล์คีย์ส่วนตัวในรูปแบบ JSON
วิธีสร้างไฟล์คีย์ส่วนตัวสำหรับบัญชีบริการ
ในคอนโซล Firebase ให้เปิดการตั้งค่า > บัญชีบริการ
คลิกสร้างคีย์ส่วนตัวใหม่ แล้วยืนยันโดยคลิกสร้างคีย์
จัดเก็บไฟล์ JSON ที่มีคีย์อย่างปลอดภัย
เมื่อให้สิทธิ์ผ่านบัญชีบริการ คุณจะมี 2 ตัวเลือกในการระบุข้อมูลเข้าสู่ระบบให้กับแอปพลิเคชัน คุณจะตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS หรือส่งเส้นทางไปยังคีย์บัญชีบริการในโค้ดอย่างชัดแจ้งก็ได้ ตัวเลือกแรกปลอดภัยกว่าและเราขอแนะนำอย่างยิ่งให้ใช้
วิธีตั้งค่าตัวแปรสภาพแวดล้อม
ตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS เป็นเส้นทางไฟล์ของไฟล์ JSON ที่มีคีย์บัญชีบริการ ตัวแปรนี้มีผลกับเซสชันเชลล์ปัจจุบันเท่านั้น ดังนั้นหากคุณเปิดเซสชันใหม่ ให้ตั้งค่าตัวแปรอีกครั้ง
Linux หรือ macOS
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"
Windows
เมื่อใช้ PowerShell
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"
หลังจากทำตามขั้นตอนข้างต้นแล้ว ข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน (ADC) จะกำหนดข้อมูลเข้าสู่ระบบของคุณโดยนัย ซึ่งจะช่วยให้คุณใช้ข้อมูลเข้าสู่ระบบบัญชีบริการได้เมื่อทดสอบหรือใช้งานในสภาพแวดล้อมที่ไม่ใช่ของ Google
ใช้ข้อมูลเข้าสู่ระบบ Firebase ร่วมกับไลบรารี Google Auth สำหรับภาษาที่ต้องการเพื่อเรียกข้อมูลโทเค็นการเข้าถึง OAuth 2.0 ที่มีระยะเวลาสั้นๆ
node.js
function getAccessToken() {
return admin.credential.applicationDefault().getAccessToken()
.then(accessToken => {
return accessToken.access_token;
})
.catch(err => {
console.error('Unable to get access token');
console.error(err);
});
}
ในตัวอย่างนี้ ไลบรารีไคลเอ็นต์ Google API จะตรวจสอบสิทธิ์คําขอด้วยโทเค็นเว็บของ JSON หรือ JWT ดูข้อมูลเพิ่มเติมได้ที่โทเค็นเว็บ JSON
Python
def _get_access_token():
"""Retrieve a valid access token that can be used to authorize requests.
:return: Access token.
"""
credentials = ServiceAccountCredentials.from_json_keyfile_name(
'service-account.json', SCOPES)
access_token_info = credentials.get_access_token()
return access_token_info.access_token
Java
public static String getAccessToken() throws IOException {
GoogleCredentials googleCredentials = GoogleCredentials
.fromStream(new FileInputStream("service-account.json"))
.createScoped(Arrays.asList(SCOPES));
googleCredentials.refreshAccessToken();
return googleCredentials.getAccessToken().getTokenValue();
}
หลังจากโทเค็นการเข้าถึงหมดอายุ ระบบจะเรียกใช้เมธอดรีเฟรชโทเค็นโดยอัตโนมัติเพื่อดึงข้อมูลโทเค็นการเข้าถึงที่อัปเดตแล้ว
หากต้องการให้สิทธิ์เข้าถึง Remote Config ให้ขอขอบเขต
https://www.googleapis.com/auth/firebase.remoteconfig
แก้ไขเทมเพลตการกําหนดค่าระยะไกล
เมื่อใช้เทมเพลต Remote Config โปรดทราบว่าเทมเพลตมีเวอร์ชัน และแต่ละเวอร์ชันมีอายุการใช้งานจำกัดนับจากเวลาที่สร้างขึ้นจนถึงเวลาที่คุณแทนที่ด้วยอัปเดต ซึ่งก็คือ 90 วัน โดยมีขีดจํากัดทั้งหมด 300 เวอร์ชันที่เก็บไว้ ดูข้อมูลเพิ่มเติมได้ที่เทมเพลตและการกำหนดเวอร์ชัน
รับเทมเพลตการกำหนดค่าระยะไกลปัจจุบัน
คุณใช้ API แบ็กเอนด์เพื่อรับเทมเพลต Remote Config เวอร์ชันปัจจุบันที่ใช้งานอยู่ในรูปแบบ JSON ได้
พารามิเตอร์และค่าพารามิเตอร์ที่สร้างขึ้นเป็นตัวแปรในการทดสอบ A/B Testing โดยเฉพาะจะไม่รวมอยู่ในเทมเพลตที่ส่งออก
ใช้คำสั่งต่อไปนี้
cURL
curl --compressed -D headers -H "Authorization: Bearer token" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -o filename
คำสั่งนี้จะแสดงผลเพย์โหลด JSON ไปยังไฟล์เดียว และแสดงส่วนหัว (รวมถึง Etag) ไปยังไฟล์แยกต่างหาก
คำขอ HTTP ดิบ
Host: firebaseremoteconfig.googleapis.com GET /v1/projects/my-project-id/remoteConfig HTTP/1.1 Authorization: Bearer token Accept-Encoding: gzip
การเรียก API นี้จะส่งคืน JSON ต่อไปนี้ พร้อมด้วยส่วนหัวแยกต่างหากซึ่งรวมถึง ETag ที่คุณใช้สำหรับคำขอที่ตามมา
ตรวจสอบเทมเพลตการกําหนดค่าระยะไกล
คุณตรวจสอบความถูกต้องของข้อมูลอัปเดตก่อนเผยแพร่ได้ (ไม่บังคับ)
ตรวจสอบการอัปเดตเทมเพลตโดยเพิ่มพารามิเตอร์ URL ?validate_only=true
ต่อท้ายคำขอเผยแพร่
รหัสสถานะ 200 และ etag ที่อัปเดตแล้วซึ่งมีนามสกุล -0
ในคำตอบหมายความว่าการอัปเดตได้รับการตรวจสอบเรียบร้อยแล้ว การตอบกลับที่ไม่ใช่ 200 บ่งชี้ว่าข้อมูล JSON มีข้อผิดพลาดที่คุณต้องแก้ไขก่อนเผยแพร่
อัปเดตเทมเพลตการกําหนดค่าระยะไกล
เมื่อดึงข้อมูลเทมเพลตและแก้ไขเนื้อหา JSON ด้วยอัปเดตที่ต้องการแล้ว คุณจะเผยแพร่เนื้อหาได้ การเผยแพร่เทมเพลตตามที่อธิบายในส่วนนี้จะแทนที่ไฟล์ที่อัปเดตแล้วกับเทมเพลตการกําหนดค่าที่มีอยู่ทั้งหมด และเทมเพลตใหม่ที่ใช้งานอยู่จะได้รับการกำหนดหมายเลขเวอร์ชันที่มากกว่าเทมเพลตที่แทนที่ 1 หมายเลข
หากจำเป็น คุณสามารถใช้ REST API เพื่อเปลี่ยนกลับไปใช้เวอร์ชันก่อนหน้าได้ คุณสามารถตรวจสอบก่อนเผยแพร่เพื่อลดความเสี่ยงที่จะเกิดข้อผิดพลาดในการอัปเดต
Remote Config การปรับเฉพาะบุคคลและเงื่อนไขจะรวมอยู่ในเทมเพลตที่ดาวน์โหลด ดังนั้นคุณจึงควรทราบข้อจำกัดต่อไปนี้เมื่อพยายามเผยแพร่ไปยังโปรเจ็กต์อื่น
ไม่สามารถนําเข้าการปรับให้เหมาะกับผู้ใช้แต่ละรายจากโปรเจ็กต์หนึ่งไปยังอีกโปรเจ็กต์หนึ่งได้
ตัวอย่างเช่น หากเปิดใช้การปรับตามโปรไฟล์ผู้ใช้ในโปรเจ็กต์และดาวน์โหลดและแก้ไขเทมเพลต คุณจะเผยแพร่เทมเพลตนั้นในโปรเจ็กต์เดียวกันได้ แต่จะเผยแพร่ในโปรเจ็กต์อื่นไม่ได้ เว้นแต่คุณจะลบการปรับตามโปรไฟล์ผู้ใช้ออกจากเทมเพลต
คุณสามารถนําเข้าเงื่อนไขจากโปรเจ็กต์หนึ่งไปยังอีกโปรเจ็กต์หนึ่งได้ แต่โปรดทราบว่าค่าแบบมีเงื่อนไขที่เฉพาะเจาะจง (เช่น รหัสแอปหรือกลุ่มเป้าหมาย) ควรอยู่ในโปรเจ็กต์เป้าหมายก่อนเผยแพร่
ตัวอย่างเช่น หากคุณมีพารามิเตอร์ Remote Config ที่ใช้เงื่อนไขที่ระบุค่าแพลตฟอร์มเป็น
iOS
คุณจะเผยแพร่เทมเพลตไปยังโปรเจ็กต์อื่นได้ เนื่องจากค่าแพลตฟอร์มเหมือนกันสำหรับทุกโปรเจ็กต์ อย่างไรก็ตาม หากเงื่อนไขใช้รหัสแอปหรือกลุ่มเป้าหมายของผู้ใช้ที่เฉพาะเจาะจงซึ่งไม่มีอยู่ในโปรเจ็กต์เป้าหมาย การยืนยันจะดำเนินการไม่สำเร็จหากเทมเพลตที่คุณวางแผนจะเผยแพร่มีเงื่อนไขที่อาศัย Google Analytics คุณต้องเปิดใช้ Analytics ในโปรเจ็กต์เป้าหมาย
cURL
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
นี้ คุณสามารถระบุเนื้อหาได้โดยใช้อักขระ "@" ตามด้วยชื่อไฟล์
คำขอ HTTP ดิบ
Host: firebaseremoteconfig.googleapis.com PUT /v1/projects/my-project-id/remoteConfig HTTP/1.1 Content-Length: size Content-Type: application/json; UTF8 Authorization: Bearer token If-Match: expected ETag Accept-Encoding: gzip JSON_HERE
เนื่องจากเป็นคำขอเขียน ระบบจึงแก้ไข ETag ด้วยคำสั่งนี้ และระบุ ETag ที่อัปเดตแล้วในส่วนหัวของคำตอบของคำสั่ง PUT
ถัดไป
แก้ไขเงื่อนไขการกำหนดค่าระยะไกล
คุณสามารถแก้ไขเงื่อนไขRemote Configและค่าแบบมีเงื่อนไขแบบเป็นโปรแกรมได้ เมื่อใช้ REST API คุณต้องแก้ไขเทมเพลตโดยตรงเพื่อแก้ไขเงื่อนไขก่อนเผยแพร่เทมเพลต
{ "conditions": [{ "name": "android_english", "expression": "device.os == 'android' && device.country in ['us', 'uk']", "tagColor": "BLUE" }, { "name": "tenPercent", "expression": "percent <= 10", "tagColor": "BROWN" }], "parameters": { "welcome_message": { "defaultValue": { "value": "Welcome to this sample app" }, "conditionalValues": { "tenPercent": { "value": "Welcome to this new sample app" } }, "description": "The sample app's welcome message" }, "welcome_message_caps": { "defaultValue": { "value": "false" }, "conditionalValues": { "android_english": { "value": "true" } }, "description": "Whether the welcome message should be displayed in all capital letters." } } }
การแก้ไขข้างต้นจะกําหนดชุดเงื่อนไขก่อน จากนั้นจึงกําหนดค่าเริ่มต้นและค่าพารามิเตอร์ตามเงื่อนไข (ค่าแบบมีเงื่อนไข) สําหรับพารามิเตอร์แต่ละรายการ นอกจากนี้ ยังเพิ่มคำอธิบายที่ไม่บังคับสำหรับองค์ประกอบแต่ละรายการด้วย ซึ่งคำอธิบายเหล่านี้มีไว้สำหรับนักพัฒนาแอปและจะไม่แสดงในแอป เช่นเดียวกับความคิดเห็นโค้ด นอกจากนี้ยังมีETag ไว้สำหรับการควบคุมเวอร์ชันด้วย
Remote Configแบ็กเอนด์ API มีเงื่อนไขและโอเปอเรเตอร์การเปรียบเทียบหลายรายการที่คุณสามารถใช้เพื่อเปลี่ยนลักษณะการทำงานและลักษณะที่ปรากฏของแอป ดูข้อมูลเพิ่มเติมเกี่ยวกับเงื่อนไขและโอเปอเรเตอร์ที่รองรับสำหรับเงื่อนไขเหล่านี้ได้ที่ข้อมูลอ้างอิงนิพจน์เงื่อนไข
รหัสข้อผิดพลาด HTTP
รหัสสถานะ | ความหมาย |
---|---|
200 | อัปเดตสำเร็จแล้ว |
400 | เกิดข้อผิดพลาดในการตรวจสอบ ตัวอย่างเช่น คําขอที่มีคีย์มากกว่าจํานวนคีย์ที่อนุญาต ซึ่งก็คือ 2,000 คีย์ จะแสดงผลเป็น 400 (คําขอผิดพลาด) พร้อมข้อความแสดงข้อผิดพลาด Param count too large
นอกจากนี้ รหัสสถานะ HTTPS นี้ยังอาจเกิดขึ้นใน 2 สถานการณ์ต่อไปนี้
|
401 | เกิดข้อผิดพลาดการให้สิทธิ์ (ไม่ได้ระบุโทเค็นเพื่อการเข้าถึงหรือไม่ได้เพิ่ม Firebase Remote Config REST API ไปยังโปรเจ็กต์ใน Cloud Developer Console) |
403 | เกิดข้อผิดพลาดในการตรวจสอบสิทธิ์ (ระบุโทเค็นการเข้าถึงที่ไม่ถูกต้อง) |
500 | เกิดข้อผิดพลาดภายใน หากเกิดข้อผิดพลาดนี้ขึ้น ให้ ยื่นคำขอแจ้งปัญหากับทีมสนับสนุนของ Firebase |
รหัสสถานะ 200 หมายความว่าเทมเพลต Remote Config (พารามิเตอร์ ค่า และเงื่อนไขสําหรับโปรเจ็กต์) ได้รับการอัปเดตแล้วพร้อมใช้งานในแอปที่ใช้โปรเจ็กต์นี้ รหัสสถานะอื่นๆ บ่งบอกว่าRemote Config เทมเพลตที่มีอยู่ก่อนหน้านี้ยังคงมีผลอยู่
หลังจากส่งการอัปเดตเทมเพลตแล้ว ให้ไปที่คอนโซล Firebase เพื่อตรวจสอบว่าการเปลี่ยนแปลงปรากฏตามที่คาดไว้ ซึ่งสำคัญมากเนื่องจากลำดับของเงื่อนไขจะส่งผลต่อวิธีประเมิน (เงื่อนไขแรกที่ประเมิน true
จะมีผล)
การใช้ ETag และการอัปเดตแบบบังคับ
Remote Config REST API ใช้แท็กเอนทิตี (ETag) เพื่อป้องกันเงื่อนไขการแข่งขันและการอัปเดตทรัพยากรที่ทับซ้อนกัน ดูข้อมูลเพิ่มเติมเกี่ยวกับ ETag ได้ที่ ETag - HTTP
สําหรับ REST API นั้น Google ขอแนะนําให้คุณแคช ETag ที่ได้จากคําสั่ง GET
ล่าสุด และใช้ค่า ETag นั้นในส่วนหัวคําขอ If-Match
เมื่อออกคําสั่ง PUT
หากคำสั่ง PUT
ทำให้เกิดรหัสสถานะ HTTPS 409 คุณควรออกคำสั่ง GET
ใหม่เพื่อรับ ETag และเทมเพลตใหม่เพื่อใช้กับคำสั่ง PUT
ถัดไป
คุณหลีกเลี่ยง ETag และการป้องกันจาก ETag ได้โดยการบังคับให้อัปเดตเทมเพลต Remote Config ดังนี้ If-Match: *
อย่างไรก็ตาม เราไม่แนะนําให้ใช้แนวทางนี้เนื่องจากมีความเสี่ยงที่จะทำให้การอัปเดตเทมเพลต Remote Config สูญหายหากมีไคลเอ็นต์หลายรายอัปเดตเทมเพลต Remote Config ข้อขัดแย้งประเภทนี้อาจเกิดขึ้นได้เมื่อมีไคลเอ็นต์หลายรายที่ใช้ API หรือมีการอัปเดตที่ขัดแย้งกันจากไคลเอ็นต์ API และผู้ใช้Firebaseคอนโซล
ดูคําแนะนําในการจัดการเวอร์ชันเทมเพลต Remote Config ได้ที่เทมเพลตการกําหนดค่าระยะไกลและการจัดการเวอร์ชัน