เริ่มต้นใช้งานการกำหนดค่าระยะไกลของ Firebase


คุณสามารถใช้ Firebase Remote Config เพื่อกำหนดพารามิเตอร์ในแอปและอัปเดตค่าในระบบคลาวด์ ซึ่งจะช่วยให้คุณแก้ไขรูปลักษณ์และลักษณะการทํางานของแอปได้โดยไม่ต้องเผยแพร่การอัปเดตแอป คู่มือนี้จะแนะนำขั้นตอนเริ่มต้นใช้งานและแสดงโค้ดตัวอย่างบางส่วน ซึ่งทั้งหมดนี้สามารถโคลนหรือดาวน์โหลดได้จากที่เก็บ GitHub ของ firebase/quickstart-ios

ขั้นตอนที่ 1: เพิ่ม Remote Config ลงในแอป

  1. เพิ่ม Firebase ลงในโปรเจ็กต์ Apple หากยังไม่ได้ดำเนินการ

  2. สําหรับ Remote Config ต้องใช้ Google Analytics ในการกําหนดเป้าหมายแบบมีเงื่อนไขของอินสแตนซ์แอปไปยังพร็อพเพอร์ตี้ผู้ใช้และกลุ่มเป้าหมาย ตรวจสอบว่าคุณเปิดใช้ Google Analytics ในโปรเจ็กต์แล้ว

  3. สร้างออบเจ็กต์ Remote Config แบบ Singleton ดังที่แสดงในตัวอย่างต่อไปนี้

    Swift

    remoteConfig = RemoteConfig.remoteConfig()
    let settings = RemoteConfigSettings()
    settings.minimumFetchInterval = 0
    remoteConfig.configSettings = settings

    Objective-C

    self.remoteConfig = [FIRRemoteConfig remoteConfig];
    FIRRemoteConfigSettings *remoteConfigSettings = [[FIRRemoteConfigSettings alloc] init];
    remoteConfigSettings.minimumFetchInterval = 0;
    self.remoteConfig.configSettings = remoteConfigSettings;

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

ในระหว่างการพัฒนา เราขอแนะนําให้ตั้งค่าช่วงเวลาการดึงข้อมูลขั้นต่ำให้ต่ำ ดูข้อมูลเพิ่มเติมได้ที่การจำกัด

ขั้นตอนที่ 2: ตั้งค่าพารามิเตอร์เริ่มต้นในแอป

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

  1. กําหนดชุดชื่อพารามิเตอร์และค่าพารามิเตอร์เริ่มต้นโดยใช้ออบเจ็กต์ NSDictionary หรือไฟล์ plist

    หากกําหนดค่าRemote Configค่าพารามิเตอร์แบ็กเอนด์แล้ว คุณสามารถดาวน์โหลดไฟล์ plist ที่สร้างขึ้นซึ่งมีค่าเริ่มต้นทั้งหมดและบันทึกลงในโปรเจ็กต์ Xcode

    REST

    curl --compressed -D headers -H "Authorization: Bearer token -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=PLIST -o RemoteConfigDefaults.plist
    

    คอนโซล Firebase

    1. ในแท็บพารามิเตอร์ ให้เปิดเมนู แล้วเลือกดาวน์โหลดค่าเริ่มต้น

    2. เมื่อได้รับข้อความแจ้ง ให้เปิดใช้ .plist สำหรับ iOS แล้วคลิกดาวน์โหลดไฟล์

  2. เพิ่มค่าเหล่านี้ลงในออบเจ็กต์ Remote Config โดยใช้ setDefaults: ตัวอย่างต่อไปนี้จะตั้งค่าเริ่มต้นในแอปจากไฟล์ plist

    Swift

    remoteConfig.setDefaults(fromPlist: "RemoteConfigDefaults")

    Objective-C

    [self.remoteConfig setDefaultsFromPlistFileName:@"RemoteConfigDefaults"];

ขั้นตอนที่ 3: รับค่าพารามิเตอร์เพื่อใช้ในแอป

ตอนนี้คุณรับค่าพารามิเตอร์จากออบเจ็กต์ Remote Config ได้แล้ว หากในภายหลังคุณตั้งค่าในแบ็กเอนด์ Remote Config ดึงข้อมูล แล้วเปิดใช้งาน ค่าเหล่านั้นจะใช้ได้กับแอปของคุณ ไม่เช่นนั้น คุณจะได้รับค่าพารามิเตอร์ในแอปที่กําหนดค่าโดยใช้ setDefaults: หากต้องการรับค่าเหล่านี้ ให้เรียกใช้วิธี configValueForKey: โดยระบุคีย์พารามิเตอร์เป็นอาร์กิวเมนต์

ขั้นตอนที่ 4: ตั้งค่าพารามิเตอร์

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

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

ขั้นตอนที่ 5: ดึงข้อมูลและเปิดใช้งานค่า

หากต้องการดึงค่าพารามิเตอร์จาก Remote Config ให้เรียกใช้เมธอด fetchWithCompletionHandler: หรือ fetchWithExpirationDuration:completionHandler: ระบบจะดึงข้อมูลค่าที่คุณตั้งค่าในแบ็กเอนด์และแคชไว้ในออบเจ็กต์ Remote Config

ในกรณีที่คุณต้องการดึงข้อมูลและเปิดใช้งานค่าในคําเรียกเดียว ให้ใช้ fetchAndActivateWithCompletionHandler:

ตัวอย่างนี้จะดึงค่าจากแบ็กเอนด์ Remote Config (ไม่ใช่ค่าที่แคชไว้) และเรียกใช้ activateWithCompletionHandler: เพื่อให้แอปใช้งานได้

Swift

remoteConfig.fetch { (status, error) -> Void in
  if status == .success {
    print("Config fetched!")
    self.remoteConfig.activate { changed, error in
      // ...
    }
  } else {
    print("Config not fetched")
    print("Error: \(error?.localizedDescription ?? "No error available.")")
  }
  self.displayWelcome()
}

Objective-C

[self.remoteConfig fetchWithCompletionHandler:^(FIRRemoteConfigFetchStatus status, NSError *error) {
    if (status == FIRRemoteConfigFetchStatusSuccess) {
        NSLog(@"Config fetched!");
      [self.remoteConfig activateWithCompletion:^(BOOL changed, NSError * _Nullable error) {
        if (error != nil) {
          NSLog(@"Activate error: %@", error.localizedDescription);
        } else {
          dispatch_async(dispatch_get_main_queue(), ^{
            [self displayWelcome];
          });
        }
      }];
    } else {
        NSLog(@"Config not fetched");
        NSLog(@"Error %@", error.localizedDescription);
    }
}];

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

ขั้นตอนที่ 6: ฟังการอัปเดตแบบเรียลไทม์

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

Firebase SDK สำหรับแพลตฟอร์ม Apple เวอร์ชัน 10.7.0 ขึ้นไปรองรับการอัปเดตแบบเรียลไทม์

  1. ในแอป ให้เรียกใช้ addOnConfigUpdateListener เพื่อเริ่มการรอการอัปเดต และดึงข้อมูลค่าพารามิเตอร์ใหม่หรือที่อัปเดตแล้วโดยอัตโนมัติ ตัวอย่างต่อไปนี้จะคอยฟังการอัปเดต และเมื่อเรียกใช้ activateWithCompletionHandler ก็จะใช้ค่าที่ดึงข้อมูลใหม่เพื่อแสดงข้อความต้อนรับที่อัปเดต

    Swift

    remoteConfig.addOnConfigUpdateListener { configUpdate, error in
      guard let configUpdate, error == nil else {
        print("Error listening for config updates: \(error)")
      }
    
      print("Updated keys: \(configUpdate.updatedKeys)")
    
      self.remoteConfig.activate { changed, error in
        guard error == nil else { return self.displayError(error) }
        DispatchQueue.main.async {
          self.displayWelcome()
        }
      }
    }

    Objective-C

    __weak __typeof__(self) weakSelf = self;
    [self.remoteConfig addOnConfigUpdateListener:^(FIRRemoteConfigUpdate * _Nonnull configUpdate, NSError * _Nullable error) {
      if (error != nil) {
        NSLog(@"Error listening for config updates %@", error.localizedDescription);
      } else {
        NSLog(@"Updated keys: %@", configUpdate.updatedKeys);
    
        __typeof__(self) strongSelf = weakSelf;
        [strongSelf.remoteConfig activateWithCompletion:^(BOOL changed, NSError * _Nullable error) {
          if (error != nil) {
            NSLog(@"Activate error %@", error.localizedDescription);
          }
    
          dispatch_async(dispatch_get_main_queue(), ^{
            [strongSelf displayWelcome];
          });
        }];
      }
    }];
  2. ครั้งถัดไปที่คุณเผยแพร่ Remote Config เวอร์ชันใหม่ อุปกรณ์ที่ใช้แอปของคุณและรอการเปลี่ยนแปลงจะเรียกใช้ตัวแฮนเดิลการดำเนินการเสร็จสมบูรณ์

การควบคุม

หากแอปดึงข้อมูลหลายครั้งเกินไปในช่วงเวลาสั้นๆ ระบบจะจำกัดการเรียกดึงข้อมูลและ SDK จะแสดงผลเป็น FIRRemoteConfigFetchStatusThrottled ก่อน SDK เวอร์ชัน 6.3.0 ขีดจํากัดคือคําขอดึงข้อมูล 5 รายการในกรอบเวลา 60 นาที (เวอร์ชันใหม่มีขีดจํากัดที่อนุญาตมากขึ้น)

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

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

  1. พารามิเตอร์ใน fetch(long)
  2. พารามิเตอร์ใน FIRRemoteConfigSettings.MinimumFetchInterval
  3. ค่าเริ่มต้น 12 ชั่วโมง

ขั้นตอนถัดไป

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