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

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

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

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

เริ่มต้น 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 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 Configแบ็กเอนด์ 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

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

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

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

รหัสข้อผิดพลาด 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 ได้ที่เทมเพลตการกําหนดค่าระยะไกลและการจัดการเวอร์ชัน