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

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

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

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

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

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

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

Admin SDK คือชุดไลบรารีเซิร์ฟเวอร์ที่ให้คุณโต้ตอบกับ Firebase จากสภาพแวดล้อมที่ได้รับสิทธิ์ นอกจากการอัปเดต ในการกำหนดค่าระยะไกล Admin SDK จะเปิดใช้การสร้างและยืนยัน โทเค็นการตรวจสอบสิทธิ์ Firebase, การอ่านและการเขียนจาก Realtime Database และอื่นๆ โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับข้อกำหนดเบื้องต้นและการตั้งค่า 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);

รับเทมเพลตการกำหนดค่าระยะไกลปัจจุบัน

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

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

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

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

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

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

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

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

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

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

  • ไม่สามารถนำเข้าการปรับเปลี่ยนในแบบของคุณจากโปรเจ็กต์ไปยังโปรเจ็กต์ได้

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

รับเทมเพลตการกำหนดค่าระยะไกลปัจจุบัน

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

อัปเดตเทมเพลตการกำหนดค่าระยะไกล

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

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

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

  • ไม่สามารถนำเข้าการปรับเปลี่ยนในแบบของคุณจากโปรเจ็กต์ไปยังโปรเจ็กต์ได้

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

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

    เช่น หากคุณมีพารามิเตอร์การกำหนดค่าระยะไกลที่ใช้เงื่อนไข ที่ระบุค่าแพลตฟอร์มเป็น 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 นี้อาจเกิดขึ้นได้ใน 2 สถานการณ์ต่อไปนี้
  • เกิดข้อผิดพลาดเกี่ยวกับเวอร์ชันไม่ตรงกันเนื่องจากมีการอัปเดตชุดค่าและเงื่อนไขนับตั้งแต่ที่คุณดึงข้อมูลค่า ETag ครั้งล่าสุด หากต้องการแก้ไขปัญหานี้ คุณควรใช้คำสั่ง GET เพื่อรับเทมเพลตและค่า ETag ใหม่ จากนั้นอัปเดตเทมเพลต จากนั้นส่งโดยใช้เทมเพลตดังกล่าวและค่า ETag ใหม่
  • มีการสร้างคำสั่ง PUT (อัปเดตคำขอเทมเพลตการกำหนดค่าระยะไกล) โดยไม่ระบุส่วนหัว If-Match
401 เกิดข้อผิดพลาดในการให้สิทธิ์ (ไม่ได้ระบุโทเค็นเพื่อการเข้าถึงหรือ ยังไม่ได้เพิ่ม REST API การกำหนดค่าระยะไกลของ Firebase ในโปรเจ็กต์ของคุณใน Cloud Developer Console)
403 เกิดข้อผิดพลาดในการตรวจสอบสิทธิ์ (ระบุโทเค็นเพื่อการเข้าถึงที่ไม่ถูกต้อง)
500 เกิดข้อผิดพลาดภายใน หากข้อผิดพลาดนี้เกิดขึ้น ยื่นตั๋วสนับสนุน Firebase

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

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

การใช้ ETag และการอัปเดตที่บังคับ

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

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

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

ดูคำแนะนำเกี่ยวกับการจัดการเวอร์ชันเทมเพลตการกำหนดค่าระยะไกลได้ที่ เทมเพลตการกำหนดค่าระยะไกลและการกำหนดเวอร์ชัน