Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

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

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

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

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

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

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

ส่วนต่อไปนี้ของคู่มือนี้อธิบายการดำเนินการที่คุณสามารถทำได้ด้วย 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 Application Default Credentials และอ่านตัวเลือกจากตัวแปรสภาพแวดล้อม FIREBASE_CONFIG หากเนื้อหาของตัวแปร FIREBASE_CONFIG เริ่มต้นด้วย { จะถูกแยกวิเคราะห์เป็นวัตถุ JSON มิฉะนั้น SDK จะถือว่าสตริงนั้นเป็นชื่อของไฟล์ JSON ที่มีตัวเลือก

ตัวอย่างเช่น:

โหนด js

const admin = require('firebase-admin');
admin.initializeApp();

ชวา

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 จะไม่รวมอยู่ในเทมเพลตที่ส่งออก

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

โหนด 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);
      });
}

ชวา

Template template = FirebaseRemoteConfig.getInstance().getTemplateAsync().get();
// See the ETag of the fetched template.
System.out.println("ETag from server: " + template.getETag());

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

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

โหนด js

function addParameterToGroup(template) {
  template.parameterGroups['new_menu'].parameters['spring_season'] = {
    defaultValue: {
      useInAppDefault: true
    },
    description: 'spring season menu visibility.',
  };
}

ชวา

template.getParameterGroups().get("new_menu").getParameters()
        .put("spring_season", new Parameter()
                .setDefaultValue(ParameterValue.inAppDefault())
                .setDescription("spring season menu visibility.")
        );

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

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

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

โหนด js

function addNewCondition(template) {
  template.conditions.push({
    name: 'android_en',
    expression: 'device.os == \'android\' && device.country in [\'us\', \'uk\']',
    tagColor: 'BLUE',
  });
}

ชวา

template.getConditions().add(new Condition("android_en",
        "device.os == 'android' && device.country in ['us', 'uk']", TagColor.BLUE));

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

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

ตรวจสอบเทมเพลตการกำหนดค่าระยะไกล

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

โหนด 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);
      });
}

ชวา

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

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

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

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

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

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

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

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

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

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

  • หากเทมเพลตที่คุณวางแผนจะเผยแพร่มีเงื่อนไขที่ใช้ Google Analytics จะต้องเปิดใช้ Analytics ในโครงการเป้าหมาย

โหนด 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);
      });
}

ชวา

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

ลินุกซ์หรือ macOS

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

หน้าต่าง

ด้วย 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

หลาม

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

ชวา

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

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

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

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

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

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

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

ขด

curl --compressed -D headers -H "Authorization: Bearer token" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -o filename

คำสั่งนี้ส่งออกเพย์โหลด JSON ไปยังไฟล์เดียว และส่วนหัว (รวมถึง Etag) ไปยังไฟล์แยกต่างหาก

คำขอ HTTP ดิบ

Host: firebaseremoteconfig.googleapis.com

GET /v1/projects/my-project-id/remoteConfig HTTP/1.1
Authorization: Bearer token
Accept-Encoding: gzip

การเรียก API นี้ส่งคืน JSON ต่อไปนี้ พร้อมด้วยส่วนหัวแยกต่างหากซึ่งมี ETag ที่คุณใช้สำหรับคำขอที่ตามมา

ตรวจสอบเทมเพลตการกำหนดค่าระยะไกล

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

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

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

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

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

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

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

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

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

  • หากเทมเพลตที่คุณวางแผนจะเผยแพร่มีเงื่อนไขที่ใช้ Google Analytics จะต้องเปิดใช้ Analytics ในโครงการเป้าหมาย

ขด

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

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

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

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