获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

แก้ไขการกำหนดค่าระยะไกลโดยทางโปรแกรม

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

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

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

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

ส่วนต่อไปนี้ของคู่มือนี้อธิบายการดำเนินการที่คุณสามารถทำได้ด้วย Remote Config backend API หากต้องการตรวจสอบโค้ดบางส่วนที่ทำงานเหล่านี้ผ่าน REST API โปรดดูตัวอย่างแอปต่อไปนี้

แก้ไขการกำหนดค่าระยะไกลโดยใช้ Firebase Admin SDK

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

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

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

คุณสามารถใช้แบ็กเอนด์ API เพื่อรับเวอร์ชันที่ใช้งานปัจจุบันของเทมเพลต Remote Config ในรูปแบบ JSON

พารามิเตอร์และค่าพารามิเตอร์ที่สร้างขึ้นโดยเฉพาะเป็นตัวแปรในการทดสอบ A/B จะไม่รวมอยู่ในเทมเพลตที่ส่งออก

ในการรับเทมเพลต:

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

แก้ไขพารามิเตอร์การกำหนดค่าระยะไกล

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

แก้ไขเงื่อนไขการกำหนดค่าระยะไกล

คุณสามารถแก้ไขและเพิ่มเงื่อนไขการกำหนดค่าระยะไกลและค่าตามเงื่อนไขโดยทางโปรแกรม ตัวอย่างเช่น ในการเพิ่มเงื่อนไขใหม่:

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

ตรวจสอบความถูกต้องของแม่แบบการกำหนดค่าระยะไกล

คุณสามารถเลือกตรวจสอบการอัปเดตของคุณก่อนที่จะเผยแพร่ ดังที่แสดง:

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 ที่จัดรูปแบบไม่ถูกต้อง ตัวอย่างเช่น คำขอที่มีคีย์เกินจำนวนที่อนุญาต—2000—จะส่งคืนข้อความแสดงข้อผิดพลาด Param count too large

เผยแพร่เทมเพลตการกำหนดค่าระยะไกล

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

หากจำเป็น คุณสามารถใช้ REST API เพื่อ ย้อนกลับเป็นเวอร์ชันก่อนหน้า เพื่อลดความเสี่ยงของข้อผิดพลาดในการอัปเดต คุณสามารถ ตรวจสอบก่อนเผยแพร่

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

  • ไม่สามารถนำเข้าการตั้งค่าส่วนบุคคลจากโปรเจ็กต์หนึ่งไปอีกโปรเจ็กต์

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

  • นำเข้าเงื่อนไขจากโปรเจ็กต์หนึ่งไปยังอีกโปรเจ็กต์ได้ แต่โปรดทราบว่าค่าตามเงื่อนไขเฉพาะใดๆ (เช่น ID แอปหรือผู้ชม) ควรมีอยู่ในโปรเจ็กต์เป้าหมายก่อนเผยแพร่

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

ในการสร้างไฟล์คีย์ส่วนตัวสำหรับบัญชีบริการของคุณ:

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

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

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

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

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

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

private static String getAccessToken() throws IOException {
  GoogleCredentials googleCredentials = GoogleCredentials
          .fromStream(new FileInputStream("service-account.json"))
          .createScoped(Arrays.asList(SCOPES));
  googleCredentials.refreshAccessToken();
  return googleCredentials.getAccessToken().getTokenValue();
}

หลังจากที่โทเค็นการเข้าถึงของคุณหมดอายุ วิธีการรีเฟรชโทเค็นจะถูกเรียกโดยอัตโนมัติเพื่อเรียกข้อมูลโทเค็นการเข้าถึงที่อัปเดต

หากต้องการให้สิทธิ์การเข้าถึงการกำหนดค่าระยะไกล โปรดขอขอบเขต https://www.googleapis.com/auth/firebase.remoteconfig

แก้ไขเทมเพลต Remote Config

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

รับเทมเพลต Remote Config ปัจจุบัน

คุณสามารถใช้แบ็กเอนด์ API เพื่อรับเวอร์ชันที่ใช้งานปัจจุบันของเทมเพลต Remote Config ในรูปแบบ JSON

พารามิเตอร์และค่าพารามิเตอร์ที่สร้างขึ้นโดยเฉพาะเป็นตัวแปรในการทดสอบ A/B จะไม่รวมอยู่ในเทมเพลตที่ส่งออก

ใช้คำสั่งต่อไปนี้:

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 มีข้อผิดพลาดที่คุณต้องแก้ไขก่อนเผยแพร่

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

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

หากจำเป็น คุณสามารถใช้ REST API เพื่อ ย้อนกลับเป็นเวอร์ชันก่อนหน้า เพื่อลดความเสี่ยงของข้อผิดพลาดในการอัปเดต คุณสามารถ ตรวจสอบก่อนเผยแพร่

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

  • ไม่สามารถนำเข้าการตั้งค่าส่วนบุคคลจากโปรเจ็กต์หนึ่งไปอีกโปรเจ็กต์

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

  • นำเข้าเงื่อนไขจากโปรเจ็กต์หนึ่งไปยังอีกโปรเจ็กต์ได้ แต่โปรดทราบว่าค่าตามเงื่อนไขเฉพาะใดๆ (เช่น ID แอปหรือผู้ชม) ควรมีอยู่ในโปรเจ็กต์เป้าหมายก่อนเผยแพร่

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

แก้ไขเงื่อนไขการกำหนดค่าระยะไกล

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

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

รหัสสถานะ ความหมาย
200 อัปเดตเรียบร้อยแล้ว
400 เกิดข้อผิดพลาดในการตรวจสอบความถูกต้อง ตัวอย่างเช่น คำขอที่มีคีย์เกินจำนวนที่อนุญาต —2000— จะส่งกลับ 400 (คำขอไม่ถูกต้อง) พร้อมข้อความแสดงข้อผิดพลาด โดย Param count too large นอกจากนี้ รหัสสถานะ HTTPS นี้สามารถเกิดขึ้นได้ในสองสถานการณ์นี้:
  • เกิดข้อผิดพลาดเวอร์ชันที่ไม่ตรงกันเนื่องจากชุดของค่าและเงื่อนไขได้รับการอัปเดตตั้งแต่คุณเรียกค่า ETag ครั้งล่าสุด ในการแก้ไขปัญหานี้ คุณควรใช้คำสั่ง GET เพื่อรับเทมเพลตใหม่และค่า ETag อัปเดตเทมเพลต จากนั้นส่งโดยใช้เทมเพลตนั้นและค่า ETag ใหม่
  • คำสั่ง PUT (คำขอเทมเพลตอัปเดตการกำหนดค่าระยะไกล) ถูกสร้างขึ้นโดยไม่ระบุส่วนหัว If-Match
401 เกิดข้อผิดพลาดในการให้สิทธิ์ (ไม่ได้ให้โทเค็นการเข้าถึงหรือไม่ได้เพิ่ม Firebase Remote Config REST API ให้กับโปรเจ็กต์ของคุณใน Cloud Developer Console)
403 เกิดข้อผิดพลาดในการตรวจสอบสิทธิ์ (ให้โทเค็นการเข้าถึงที่ไม่ถูกต้อง)
500 เกิดข้อผิดพลาดภายใน หากเกิดข้อผิดพลาดนี้ ให้ ยื่นตั๋วสนับสนุน Firebase

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

หลังจากที่คุณส่งการอัปเดตไปยังเทมเพลตของคุณ ให้ไปที่คอนโซล Firebase เพื่อตรวจสอบว่าการเปลี่ยนแปลงของคุณปรากฏตามที่คาดไว้ นี่เป็นสิ่งสำคัญเนื่องจากการเรียงลำดับของเงื่อนไขส่งผลต่อวิธีการประเมิน (เงื่อนไขแรกที่ประเมิน true จะมีผล)

การใช้ ETag และการบังคับอัพเดต

Remote Config REST API ใช้แท็กเอนทิตี (ETag) เพื่อป้องกันเงื่อนไขการแข่งขันและการอัปเดตทรัพยากรที่ทับซ้อนกัน หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ ETags โปรดดูที่ ETag - HTTP

สำหรับ REST API Google แนะนำให้คุณแคช ETag ที่ได้รับจากคำสั่ง GET ล่าสุด และใช้ค่า ETag นั้นในส่วนหัวคำขอ If-Match เมื่อออกคำสั่ง PUT หากคำสั่ง PUT ของคุณส่งผลให้เกิดรหัสสถานะ HTTPS 409 คุณควรออกคำสั่ง GET ใหม่เพื่อรับ ETag และเทมเพลตใหม่เพื่อใช้กับคำสั่ง PUT ถัดไป

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

สำหรับคำแนะนำในการจัดการเวอร์ชันเทมเพลต Remote Config โปรดดูที่ เทมเพลต Remote Config และการกำหนดเวอร์ชัน