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

กำหนดค่าเทมเพลตโดยใช้ Admin SDK, REST API และ Firebase CLI page_type: guide

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

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

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

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

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

แก้ไข 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 ของแบ็กเอนด์เพื่อรับเทมเพลตเวอร์ชันที่ใช้งานอยู่ในปัจจุบันในรูปแบบ JSON ได้ Remote Config

พารามิเตอร์และค่าพารามิเตอร์ที่สร้างขึ้นเพื่อเป็นตัวแปรในการ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));

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

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

ตรวจสอบ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 ที่มีคีย์บัญชีบริการ ตัวแปรนี้ใช้ได้กับเซสชันเชลล์ปัจจุบันเท่านั้น ดังนั้นหากคุณเปิดเซสชันใหม่ ให้ตั้งค่าตัวแปรอีกครั้ง

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 สำหรับภาษาที่คุณต้องการเพื่อดึงโทเค็นเพื่อการเข้าถึง 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 ของแบ็กเอนด์เพื่อรับเทมเพลตเวอร์ชันที่ใช้งานอยู่ในปัจจุบันในรูปแบบ JSON ได้ Remote Config

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

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

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

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

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

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

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

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

  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

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