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

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

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

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

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

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

คุณสามารถใช้ Backend 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));

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

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

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

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

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 ซึ่งคุณใช้เรียก Firebase Server 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 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

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 เวอร์ชันที่จัดเก็บไว้ ดูข้อมูลเพิ่มเติมได้ที่หัวข้อเทมเพลตและการกำหนดเวอร์ชัน

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

คุณสามารถใช้ Backend 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 เพื่อวัตถุประสงค์ในการควบคุมเวอร์ชันด้วย

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

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

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

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

หลังจากส่งการอัปเดตไปยังเทมเพลตแล้ว ให้ไปที่คอนโซล Firebase เพื่อ ตรวจสอบว่าการเปลี่ยนแปลงปรากฏตามที่คาดไว้ การดำเนินการนี้มีความสำคัญเนื่องจากการจัดลำดับเงื่อนไขจะส่งผลต่อวิธีประเมินเงื่อนไข (เงื่อนไขแรกที่ประเมินเป็น true จะมีผล)

การใช้งาน ETag และการอัปเดตแบบบังคับ

REST API ของ Remote Config ใช้แท็กเอนทิตี (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 ได้ที่ หัวข้อเทมเพลตและการกำหนดเวอร์ชันการกำหนดค่าระยะไกล