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

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

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

  • กำหนดเวลาการอัปเดต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());
  }
}

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

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