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

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

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

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

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

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

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

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

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

พารามิเตอร์และค่าพารามิเตอร์ที่สร้างขึ้นเป็นตัวแปรโดยเฉพาะในการทดสอบ 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());

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

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

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

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

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

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

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

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

คุณจะตรวจสอบการอัปเดตก่อนเผยแพร่ก็ได้ ดังที่แสดง

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

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

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

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

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

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

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

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

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

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

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

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

หลังจากทำตามขั้นตอนข้างต้นแล้ว ข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน (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();
}

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

หากต้องการให้สิทธิ์เข้าถึง Remote Config ให้ขอขอบเขต https://www.googleapis.com/auth/firebase.remoteconfig

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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