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

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

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

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

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

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

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

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

ตรวจสอบความถูกต้องของเทมเพลต Remote Config

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

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

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

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

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

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

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

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

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

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

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

  • หากเทมเพลตที่คุณวางแผนจะเผยแพร่มีเงื่อนไขที่ต้องอาศัย 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

ชวา

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

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

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

ตรวจสอบความถูกต้องของเทมเพลต Remote Config

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

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

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

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

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

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

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

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

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

  • หากเทมเพลตที่คุณวางแผนจะเผยแพร่มีเงื่อนไขที่ต้องอาศัย 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 และการบังคับอัปเดต

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

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