แก้ไขการกำหนดค่าระยะไกลแบบเป็นโปรแกรม

Config templates using the Admin SDK, REST API, and Firebase CLI. page_type: guide

เอกสารนี้อธิบายวิธีอ่านและแก้ไขชุดพารามิเตอร์และเงื่อนไขที่จัดรูปแบบ JSON โดยใช้โปรแกรม ซึ่งเรียกว่าเทมเพลต Remote Config ซึ่งจะช่วยให้คุณทำการเปลี่ยนแปลงเทมเพลตในแบ็กเอนด์ที่แอปไคลเอ็นต์สามารถดึงข้อมูลได้โดยใช้ไลบรารีของไคลเอ็นต์

เมื่อใช้ REST API ของ Remote Config, Admin SDK หรือ CLI ของ Firebase ที่อธิบายไว้ในคู่มือนี้ คุณจะข้ามการจัดการเทมเพลตในคอนโซล Firebase เพื่อผสานรวมการเปลี่ยนแปลงของ Remote Config เข้ากับกระบวนการของคุณเองได้โดยตรง ตัวอย่างเช่น เมื่อใช้ API แบ็กเอนด์ของ Remote Config คุณจะทำสิ่งต่อไปนี้ได้

  • กำหนดเวลาการอัปเดต Remote Config ใช้การเรียก API ร่วมกับงาน Cron เพื่อเปลี่ยนค่า Remote Config ตามกำหนดเวลาปกติ
  • นำเข้าค่าการกำหนดค่าเป็นกลุ่มเพื่อเปลี่ยนจากระบบที่เป็นกรรมสิทธิ์ของคุณเองไปใช้ Firebase Remote Config ได้อย่างมีประสิทธิภาพ
  • ใช้ Remote Config กับ Cloud Functions for Firebase เพื่อเปลี่ยนค่าในแอปตามเหตุการณ์ที่เกิดขึ้นฝั่งเซิร์ฟเวอร์ ตัวอย่างเช่น คุณสามารถใช้ Remote Config เพื่อโปรโมตฟีเจอร์ใหม่ในแอป แล้วปิดโปรโมชันนั้นโดยอัตโนมัติเมื่อตรวจพบว่ามีผู้ใช้โต้ตอบกับฟีเจอร์ใหม่มากพอแล้ว

แผนภาพแสดงแบ็กเอนด์ของการกำหนดค่าระยะไกลที่โต้ตอบกับเครื่องมือและเซิร์ฟเวอร์ที่กำหนดเอง

ส่วนต่อไปนี้ของคู่มือนี้จะอธิบายการดำเนินการที่คุณทำได้โดยใช้ API แบ็กเอนด์ของ Remote Config

แก้ไข Remote Config โดยใช้ Firebase Admin SDK

Admin SDK คือชุดไลบรารีเซิร์ฟเวอร์ที่ช่วยให้คุณโต้ตอบกับ Firebase จากสภาพแวดล้อมที่มีสิทธิ์ได้ นอกเหนือจากการอัปเดต Remote Config แล้ว Admin SDK ยังช่วยให้สามารถสร้างและยืนยันโทเค็นการตรวจสอบสิทธิ์ Firebase รวมถึงอ่านและเขียนจาก Realtime Database ได้ด้วย ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อกำหนดเบื้องต้นและการตั้งค่า Admin SDK ได้ที่หัวข้อเพิ่ม Firebase Admin SDK ลงในเซิร์ฟเวอร์

หากต้องการตรวจสอบโค้ดตัวอย่างที่ทำงานเหล่านี้โดยใช้ Admin SDK โปรดดูแอปเริ่มต้นใช้งานด่วนรายการใดรายการหนึ่งต่อไปนี้

ในขั้นตอน Remote Config ทั่วไป คุณอาจได้รับเทมเพลตปัจจุบัน แก้ไขพารามิเตอร์หรือกลุ่มพารามิเตอร์และเงื่อนไขบางอย่าง ตรวจสอบเทมเพลต แล้วเผยแพร่ ก่อนที่จะเรียก API เหล่านั้น คุณต้องให้สิทธิ์คำขอจาก SDK

เริ่มต้น 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 ปัจจุบัน

เมื่อทำงานกับเทมเพลต 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 รายการ

คุณสามารถแก้ไขและเพิ่มพารามิเตอร์และกลุ่มพารามิเตอร์ 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 รายการ

คุณสามารถแก้ไขและเพิ่มเงื่อนไขและค่าแบบมีเงื่อนไขของ 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));

ไม่ว่าในกรณีใด คุณต้องเผยแพร่เทมเพลตอย่างชัดเจนหลังจากทำการแก้ไข

API แบ็กเอนด์ของ Remote Config มีเงื่อนไขและโอเปอเรเตอร์การเปรียบเทียบหลายรายการที่คุณใช้เพื่อเปลี่ยนลักษณะการทำงานและรูปลักษณ์ของแอปได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับเงื่อนไขและโอเปอเรเตอร์ที่รองรับสำหรับเงื่อนไขเหล่านี้ได้ที่ข้อมูลอ้างอิงนิพจน์แบบมีเงื่อนไข

ตรวจสอบเทมเพลต Remote Config

คุณสามารถตรวจสอบความถูกต้องของการอัปเดตก่อนเผยแพร่ได้ (ไม่บังคับ) ดังที่แสดงต่อไปนี้

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());
  }
}

กระบวนการตรวจสอบนี้จะตรวจสอบข้อผิดพลาด เช่น คีย์ที่ซ้ำกันสำหรับพารามิเตอร์และเงื่อนไข ชื่อเงื่อนไขที่ไม่ถูกต้องหรือเงื่อนไขที่ไม่มีอยู่ หรือ ETag ที่จัดรูปแบบไม่ถูกต้อง ตัวอย่างเช่น คำขอที่มีคีย์มากกว่าจำนวนที่อนุญาต (2,000 คีย์) จะแสดงข้อความแสดงข้อผิดพลาด Param count too large

เผยแพร่เทมเพลต Remote Config

เมื่อดึงข้อมูลเทมเพลตและแก้ไขด้วยการอัปเดตแล้ว คุณจะเผยแพร่เทมเพลตได้ การเผยแพร่เทมเพลตตามที่อธิบายไว้ในส่วนนี้จะแทนที่เทมเพลตการกำหนดค่าที่มีอยู่ทั้งหมดด้วยไฟล์ที่อัปเดต และเทมเพลตใหม่ที่ใช้งานอยู่จะได้รับการกำหนดหมายเลขเวอร์ชันที่มากกว่าเทมเพลตที่ถูกแทนที่ 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());
  }
}

แก้ไข Remote Config โดยใช้ REST API

ส่วนนี้จะอธิบายความสามารถหลักของ Remote Config REST API ที่ https://firebaseremoteconfig.googleapis.com ดูรายละเอียดทั้งหมดได้ที่เอกสารอ้างอิง API

รับโทเค็นเพื่อการเข้าถึงเพื่อตรวจสอบสิทธิ์และให้สิทธิ์คำขอ API

โปรเจ็กต์ Firebase รองรับบัญชีบริการของ Google ซึ่งคุณใช้เรียก API ของเซิร์ฟเวอร์ Firebase จากเซิร์ฟเวอร์แอปหรือสภาพแวดล้อมที่เชื่อถือได้ หากคุณกำลังพัฒนาโค้ดในเครื่องหรือติดตั้งใช้งานแอปพลิเคชันในองค์กร คุณสามารถใช้ข้อมูลเข้าสู่ระบบที่ได้รับโดยใช้บัญชีบริการนี้เพื่อให้สิทธิ์คำขอของเซิร์ฟเวอร์

คุณดูบัญชีบริการทั้งหมดสำหรับโปรเจ็กต์ Firebase ได้ในแท็บ การตั้งค่า > บัญชีบริการ

หากต้องการตรวจสอบสิทธิ์บัญชีบริการและให้สิทธิ์เข้าถึงบริการ Firebase คุณต้องสร้างไฟล์คีย์ส่วนตัวในรูปแบบ JSON

วิธีสร้างไฟล์คีย์ส่วนตัวสำหรับบัญชีบริการ

  1. ในคอนโซล Firebase ให้ไปที่ การตั้งค่า > แท็บบัญชีบริการ

  2. คลิกสร้างคีย์ส่วนตัวใหม่ แล้วยืนยันโดยคลิกสร้างคีย์

  3. จัดเก็บไฟล์ JSON ที่มีคีย์ไว้อย่างปลอดภัย

เมื่อให้สิทธิ์ผ่านบัญชีบริการ คุณจะมี 2 ตัวเลือกในการระบุข้อมูลเข้าสู่ระบบให้กับแอปพลิเคชัน คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS หรือส่งเส้นทางไปยังคีย์บัญชีบริการในโค้ดอย่างชัดแจ้งก็ได้ ตัวเลือกแรกมีความปลอดภัยมากกว่าและเราขอแนะนำอย่างยิ่ง

วิธีตั้งค่าตัวแปรสภาพแวดล้อม

ตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS เป็นเส้นทางของไฟล์ JSON ที่มีคีย์บัญชีบริการ ตัวแปรนี้จะมีผลกับเซสชัน Shell ปัจจุบันเท่านั้น ดังนั้นหากคุณเปิดเซสชันใหม่ ให้ตั้งค่าตัวแปรอีกครั้ง

Linux หรือ macOS

export GOOGLE_APPLICATION_CREDENTIALS="KEY_FILE_PATH"

Windows

ด้วย PowerShell:

$env:GOOGLE_APPLICATION_CREDENTIALS="KEY_FILE_PATH"

หลังจากทำตามขั้นตอนข้างต้นเสร็จแล้ว ข้อมูลรับรองเริ่มต้นของแอปพลิเคชัน (ADC) จะระบุข้อมูลเข้าสู่ระบบของคุณโดยนัยได้ ซึ่งจะช่วยให้คุณใช้ข้อมูลเข้าสู่ระบบของบัญชีบริการเมื่อทดสอบหรือเรียกใช้ในสภาพแวดล้อมที่ไม่ใช่ของ Google ได้

ใช้ข้อมูลเข้าสู่ระบบ Firebase ร่วมกับไลบรารีการตรวจสอบสิทธิ์ของ Google สำหรับภาษาที่ต้องการเพื่อดึงข้อมูลโทเค็นเพื่อการเข้าถึง 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

เมื่อทำงานกับเทมเพลต Remote Config โปรดทราบว่าเทมเพลตเหล่านี้มีเวอร์ชัน และแต่ละเวอร์ชันมีอายุการใช้งานที่จำกัดนับตั้งแต่เวลาที่สร้างจนถึงเวลาที่คุณแทนที่ด้วยการอัปเดต ซึ่งก็คือ 90 วัน โดยมีขีดจำกัดรวมของเวอร์ชันที่จัดเก็บไว้ 300 เวอร์ชัน ดูข้อมูลเพิ่มเติมได้ที่เทมเพลตและการกำหนดเวอร์ชัน

ดาวน์โหลดเทมเพลต Remote Config ปัจจุบัน

คุณสามารถใช้ 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 ที่คุณใช้สำหรับคำขอที่ตามมา

ตรวจสอบเทมเพลต Remote Config

คุณสามารถตรวจสอบความถูกต้องของการอัปเดตก่อนเผยแพร่ได้ (ไม่บังคับ) ตรวจสอบการอัปเดตเทมเพลตโดยเพิ่มพารามิเตอร์ของ URL ?validate_only=true ต่อท้ายคำขอเผยแพร่ ในการตอบกลับ รหัสสถานะ 200 และ ETag ที่อัปเดตซึ่งมีคำต่อท้าย -0 หมายความว่าการอัปเดตของคุณได้รับการตรวจสอบเรียบร้อยแล้ว การตอบกลับที่ไม่ใช่ 200 บ่งชี้ว่าข้อมูล JSON มีข้อผิดพลาดที่คุณต้องแก้ไขก่อนเผยแพร่

อัปเดตเทมเพลต Remote Config

เมื่อดึงข้อมูลเทมเพลตและแก้ไขเนื้อหา 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 รายการ

คุณสามารถแก้ไขเงื่อนไขและค่าแบบมีเงื่อนไขของ 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 เพื่อวัตถุประสงค์ในการควบคุมเวอร์ชันด้วย

API แบ็กเอนด์ของ Remote Config มีเงื่อนไขและโอเปอเรเตอร์การเปรียบเทียบหลายรายการที่คุณใช้เพื่อเปลี่ยนลักษณะการทำงานและรูปลักษณ์ของแอปได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับเงื่อนไขและโอเปอเรเตอร์ที่รองรับสำหรับเงื่อนไขเหล่านี้ได้ที่ข้อมูลอ้างอิงนิพจน์แบบมีเงื่อนไข

รหัสข้อผิดพลาดของ HTTP

รหัสสถานะ ความหมาย
200 อัปเดตสำเร็จแล้ว
400 เกิดข้อผิดพลาดในการตรวจสอบความถูกต้อง ตัวอย่างเช่น คำขอที่มีคีย์มากกว่าจำนวนที่อนุญาต (2,000 คีย์) จะแสดงผล 400 (คำขอไม่ถูกต้อง) พร้อมข้อความแสดงข้อผิดพลาด Param count too large นอกจากนี้ รหัสสถานะ HTTPS นี้อาจเกิดขึ้นใน 2 สถานการณ์ต่อไปนี้
  • เกิดข้อผิดพลาดเวอร์ชันไม่ตรงกันเนื่องจากชุดค่าและเงื่อนไขได้รับการอัปเดตนับตั้งแต่ที่คุณดึงค่า ETag ครั้งล่าสุด หากต้องการแก้ไขปัญหานี้ คุณควรใช้คำสั่ง GET เพื่อรับเทมเพลตและค่า ETag ใหม่ อัปเดตเทมเพลต แล้วส่งโดยใช้เทมเพลตและค่า ETag ใหม่นั้น
  • มีการใช้คำสั่ง PUT (คำขออัปเดตเทมเพลต Remote Config) โดยไม่ได้ระบุส่วนหัว If-Match
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 เราขอแนะนำให้คุณแคช 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 ได้ที่เทมเพลตและการกำหนดเวอร์ชัน Remote Config

แก้ไข Remote Config โดยใช้ Firebase CLI

Firebase CLI ช่วยให้คุณตรวจสอบ จัดการ และย้อนกลับเทมเพลต Remote Config รวมถึงแสดงรายการ ตรวจสอบ และลบการทดสอบและการเปิดตัว Remote Config ได้โดยตรงจากบรรทัดคำสั่ง

ข้อกำหนดเบื้องต้นและการตั้งค่า

  1. ติดตั้ง Firebase CLI หรืออัปเดตเป็นเวอร์ชันล่าสุด

  2. ลงชื่อเข้าใช้ Firebase:

    firebase login
  3. ตั้งค่าโปรเจ็กต์ที่ใช้งานอยู่หรือระบุ --project PROJECT_ID ด้วยคำสั่งแต่ละรายการ ดังนี้

    firebase use PROJECT_ID

ตรวจสอบว่าบัญชีหรือบัญชีบริการของคุณมีสิทธิ์ IAM ที่จำเป็น ดังนี้

สรุปคำสั่ง CLI

คำสั่ง คำอธิบาย
firebase remoteconfig:versions:list แสดงรายการเวอร์ชันเทมเพลต Remote Config ล่าสุด
firebase remoteconfig:get รับเทมเพลต Remote Config (เขียนลงในไฟล์หรือไม่ก็ได้)
firebase remoteconfig:rollback ย้อนกลับเทมเพลต Remote Config เป็นเวอร์ชันก่อนหน้า
firebase remoteconfig:experiments:list แสดงรายการการทดสอบ Remote Config ทั้งหมดในโปรเจ็กต์
firebase remoteconfig:experiments:get ดูรายละเอียดของการทดสอบ Remote Config ที่เฉพาะเจาะจง
firebase remoteconfig:experiments:delete ลบการทดสอบ Remote Config ที่เฉพาะเจาะจง
firebase remoteconfig:rollouts:list แสดงรายการการเปิดตัว Remote Config ทั้งหมดในโปรเจ็กต์
firebase remoteconfig:rollouts:get ดูรายละเอียดของการเปิดตัว Remote Config ที่เฉพาะเจาะจง
firebase remoteconfig:rollouts:delete ลบการเปิดตัว Remote Config ที่เฉพาะเจาะจง

แก้ไขเทมเพลตและเวอร์ชันของ Remote Config

ใช้คำสั่งต่อไปนี้เพื่อตรวจสอบ ดาวน์โหลด และย้อนกลับเทมเพลต Remote Config และประวัติเวอร์ชันของเทมเพลต

แสดงรายการเวอร์ชันของเทมเพลต

แสดงเทมเพลต Remote Config 10 เวอร์ชันล่าสุดโดยค่าเริ่มต้น ซึ่งรวมถึงหมายเลขเวอร์ชัน เวลาที่อัปเดต ต้นทางของการอัปเดต ประเภทการอัปเดต และupdateUser

firebase remoteconfig:versions:list [--limit NUMBER_OF_VERSIONS]
  • --limit NUMBER_OF_VERSIONS: จำนวนเวอร์ชันสูงสุดที่จะแสดงผล ระบุ 0 เพื่อแสดงเวอร์ชันที่มีอยู่ทั้งหมด (สูงสุดไม่เกินขีดจำกัดเวอร์ชันที่จัดเก็บไว้ 300 เวอร์ชัน)

ตัวอย่าง

  • แสดงรายการเวอร์ชันล่าสุด 10 เวอร์ชัน

    firebase remoteconfig:versions:list
  • แสดงรายการเวอร์ชันทั้งหมดที่พร้อมใช้งาน

    firebase remoteconfig:versions:list --limit 0
  • แสดงรายการเวอร์ชันล่าสุด 5 เวอร์ชัน

    firebase remoteconfig:versions:list --limit 5

รับเทมเพลต

รับเทมเพลต Remote Config และแสดงผลกลุ่มพารามิเตอร์ พารามิเตอร์ ชื่อเงื่อนไข และเวอร์ชัน โดยค่าเริ่มต้น ระบบจะดึงข้อมูลเวอร์ชันที่ใช้งานอยู่ล่าสุดและพิมพ์สรุปที่จัดรูปแบบแล้วไปยังเทอร์มินัล

firebase remoteconfig:get [-v, --version_number VERSION_NUMBER] [-o, --output FILENAME]
  • -v, --version_number VERSION_NUMBER: หมายเลขเวอร์ชันของเทมเพลตที่จะดึงข้อมูล หากไม่ระบุ ระบบจะใช้เวอร์ชันล่าสุดเป็นค่าเริ่มต้น
  • -o, --output FILENAME: เขียนเพย์โหลด JSON ของเทมเพลตไปยังเส้นทางที่ระบุโดยตรงแทนการพิมพ์ไปยัง stdout

ตัวอย่าง

  • แสดงเทมเพลตที่ใช้งานอยู่ในปัจจุบันในเทอร์มินัลโดยทำดังนี้

    firebase remoteconfig:get
  • ดาวน์โหลดเทมเพลตที่ใช้งานอยู่ในปัจจุบันเป็นไฟล์ JSON โดยทำดังนี้

    firebase remoteconfig:get -o remote_config_template.json
  • ดาวน์โหลดเวอร์ชันเก่าที่เฉพาะเจาะจง (เช่น เวอร์ชัน 12) เป็นไฟล์

    firebase remoteconfig:get -v 12 -o remote_config_v12.json

ย้อนกลับเทมเพลต

ย้อนกลับเทมเพลต Remote Config ที่ใช้งานอยู่เป็นเวอร์ชันก่อนหน้า ซึ่งจะสร้างเวอร์ชันที่ใช้งานอยู่ใหม่ซึ่งมีเนื้อหาเหมือนกับเวอร์ชันเป้าหมาย

firebase remoteconfig:rollback [-v, --version_number VERSION_NUMBER] [--force]
  • -v, --version_number VERSION_NUMBER: หมายเลขเวอร์ชันเป้าหมายที่จะย้อนกลับไปใช้ หากละเว้น ระบบจะใช้เวอร์ชันก่อนหน้าทันทีโดยค่าเริ่มต้น (เวอร์ชันปัจจุบันลบ 1)
  • --force: ดำเนินการย้อนกลับทันทีโดยไม่แจ้งให้ยืนยันแบบอินเทอร์แอกทีฟ (Y/N) มีประโยชน์สำหรับไปป์ไลน์ CI/CD และสคริปต์อัตโนมัติ

ตัวอย่าง

  • ย้อนกลับไปเป็นเวอร์ชันก่อนหน้าพร้อมการยืนยันแบบอินเทอร์แอกทีฟ

    firebase remoteconfig:rollback
  • ย้อนกลับไปเป็นเวอร์ชัน 8 โดยไม่แจ้งเตือน:

    firebase remoteconfig:rollback -v 8 --force

แก้ไขการทดสอบ A/B Testing รายการ

ใช้คำสั่งต่อไปนี้เพื่อแสดงรายการ ตรวจสอบ และลบการทดสอบ Remote Config A/B Testing โดยตรงด้วย CLI

แสดงรายการการทดสอบ

แสดงรายการการทดสอบ Remote Config ทั้งหมดสำหรับโปรเจ็กต์ พร้อมการกรองและการแบ่งหน้า (ไม่บังคับ)

firebase remoteconfig:experiments:list [--filter EXPRESSION] [--pageSize NUMBER] [--pageToken TOKEN]
  • --filter EXPRESSION: นิพจน์ตัวกรองที่จะใช้กับรายการการทดสอบ
  • --pageSize NUMBER: จำนวนการทดสอบที่จะแสดงต่อหน้า (ค่าเริ่มต้นคือ 10)
  • --pageToken TOKEN: โทเค็นสำหรับการออฟเซ็ตหน้าเมื่อดึงข้อมูลผลลัพธ์ที่มีการแบ่งหน้า

ตัวอย่าง

firebase remoteconfig:experiments:list

ดูรายละเอียดการทดสอบ

ดูรายละเอียดทั้งหมดสำหรับการทดสอบ Remote Config ที่ระบุ

firebase remoteconfig:experiments:get EXPERIMENT_ID

ตัวอย่าง

firebase remoteconfig:experiments:get exp_promo_discount_2026

ลบการทดสอบ

ลบการทดสอบ Remote Config ที่ระบุ

firebase remoteconfig:experiments:delete EXPERIMENT_ID

ตัวอย่าง

firebase remoteconfig:experiments:delete exp_promo_discount_2026

แก้ไขการเปิดตัว Remote Config รายการ

ใช้คำสั่งต่อไปนี้เพื่อแสดงรายการ ตรวจสอบ และลบการเปิดตัว Remote Config โดยตรงด้วย CLI

แสดงรายการการเปิดตัว

แสดงรายการการเปิดตัว Remote Config ทั้งหมดสำหรับโปรเจ็กต์ พร้อมการกรองและการแบ่งหน้า (ไม่บังคับ)

firebase remoteconfig:rollouts:list [--filter EXPRESSION] [--pageSize NUMBER] [--pageToken TOKEN]
  • --filter EXPRESSION: นิพจน์ตัวกรองที่จะใช้กับรายการการเปิดตัว
  • --pageSize NUMBER: จำนวนการเปิดตัวที่จะแสดงต่อหน้า (ค่าเริ่มต้นคือ 10)
  • --pageToken TOKEN: โทเค็นสำหรับการออฟเซ็ตหน้าเมื่อดึงข้อมูลผลลัพธ์ที่มีการแบ่งหน้า

ตัวอย่าง

firebase remoteconfig:rollouts:list

ดูรายละเอียดการเปิดตัว

ดูรายละเอียดทั้งหมดสำหรับการเปิดตัว Remote Config ที่ระบุ

firebase remoteconfig:rollouts:get ROLLOUT_ID

ตัวอย่าง

firebase remoteconfig:rollouts:get rollout_new_checkout_flow

ลบการเปิดตัว

ลบการเปิดตัว Remote Config ที่ระบุ

firebase remoteconfig:rollouts:delete ROLLOUT_ID

ตัวอย่าง

firebase remoteconfig:rollouts:delete rollout_new_checkout_flow

ดูข้อมูลทั่วไปเพิ่มเติมเกี่ยวกับคำสั่ง CLI ของ Firebase ได้ที่ข้อมูลอ้างอิง CLI ของ Firebase