Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

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

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

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