คุณใช้การกำหนดค่าระยะไกลของ Firebase เพื่อกำหนดพารามิเตอร์ในแอปได้และ อัปเดตค่าในระบบคลาวด์ ซึ่งทำให้คุณสามารถแก้ไขลักษณะที่ปรากฏ พฤติกรรมของแอปโดยไม่เผยแพร่การอัปเดตแอป คู่มือนี้จะอธิบายถึง ผ่านขั้นตอนต่างๆ เพื่อเริ่มต้นใช้งาน และแสดงโค้ดตัวอย่าง ซึ่งทั้งหมดนี้คือ สามารถโคลนหรือดาวน์โหลดจาก firebase/quickstart-ios ที่เก็บ GitHub
ขั้นตอนที่ 1: เพิ่มการกำหนดค่าระยะไกลลงในแอป
หากคุณยังไม่ได้ดำเนินการ เพิ่ม Firebase ลงในโปรเจ็กต์ Apple
สำหรับการกำหนดค่าระยะไกล คุณต้องใช้ Google Analytics สำหรับ การกำหนดเป้าหมายแบบมีเงื่อนไขของอินสแตนซ์แอป สำหรับพร็อพเพอร์ตี้ผู้ใช้และกลุ่มเป้าหมาย โปรดตรวจสอบว่า คุณ เปิดใช้ Google Analytics ในโปรเจ็กต์
สร้างออบเจ็กต์การกำหนดค่าระยะไกลแบบ 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;
ออบเจ็กต์นี้ใช้จัดเก็บค่าพารามิเตอร์เริ่มต้นในแอป อัปเดตการดึงข้อมูล ค่าพารามิเตอร์จากแบ็กเอนด์การกำหนดค่าระยะไกล และควบคุมเมื่อดึงข้อมูล ที่ใช้ได้กับแอปของคุณ
ระหว่างการพัฒนา ขอแนะนำให้ตั้งค่าการดึงข้อมูลขั้นต่ำค่อนข้างต่ำ ช่วงเวลา ดูการควบคุม เพื่อดูข้อมูลเพิ่มเติม
ขั้นตอนที่ 2: ตั้งค่าพารามิเตอร์เริ่มต้นในแอป
คุณสามารถกำหนดค่าพารามิเตอร์เริ่มต้นในแอปในการกำหนดค่าระยะไกล เพื่อให้แอปทำงานตามที่ตั้งใจไว้ก่อนที่จะเชื่อมต่อกับ แบ็กเอนด์ของการกำหนดค่าระยะไกล เพื่อให้มีค่าเริ่มต้นพร้อมใช้งานหากไม่มี ที่ตั้งไว้ในแบ็กเอนด์
กำหนดชุดชื่อพารามิเตอร์และค่าพารามิเตอร์เริ่มต้นโดยใช้
NSDictionary
หรือ ไฟล์ plistหากคุณกำหนดค่าพารามิเตอร์แบ็กเอนด์ของการกำหนดค่าระยะไกลแล้ว คุณจะดาวน์โหลดไฟล์
plist
ที่สร้างขึ้น ซึ่งมีค่าเริ่มต้นทั้งหมดและ บันทึกลงในโปรเจ็กต์ XcodeREST
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
ในพารามิเตอร์ เปิด เมนู และ เลือกดาวน์โหลดค่าเริ่มต้น
เมื่อมีข้อความแจ้ง ให้เปิดใช้ .plist สำหรับ iOS แล้วคลิกดาวน์โหลดไฟล์
เพิ่มค่าเหล่านี้ลงในออบเจ็กต์การกำหนดค่าระยะไกลโดยใช้
setDefaults:
. ตัวอย่างต่อไปนี้ตั้งค่าเริ่มต้นในแอปจากไฟล์ plistSwift
remoteConfig.setDefaults(fromPlist: "RemoteConfigDefaults")
Objective-C
[self.remoteConfig setDefaultsFromPlistFileName:@"RemoteConfigDefaults"];
ขั้นตอนที่ 3: รับค่าพารามิเตอร์เพื่อใช้ในแอป
ตอนนี้คุณสามารถรับค่าพารามิเตอร์จากออบเจ็กต์การกำหนดค่าระยะไกลได้แล้ว หากคุณ
กำหนดค่าในแบ็กเอนด์การกำหนดค่าระยะไกล ดึงข้อมูล แล้วเปิดใช้งาน
ค่าเหล่านั้นจะมีให้ในแอป ไม่เช่นนั้น คุณจะได้รับพารามิเตอร์ในแอป
ค่าที่กำหนดค่าโดยใช้
setDefaults:
.
ในการรับค่าเหล่านี้ เรียกเมธอด
configValueForKey:
โดยให้คีย์พารามิเตอร์เป็นอาร์กิวเมนต์
ขั้นตอนที่ 4: ตั้งค่าค่าพารามิเตอร์
การใช้คอนโซล Firebase หรือ API แบ็กเอนด์การกำหนดค่าระยะไกล คุณสามารถสร้างค่าเริ่มต้นแบ็กเอนด์ใหม่ๆ ที่ลบล้างมูลค่าในแอป ตามตรรกะตามเงื่อนไขหรือการกำหนดเป้าหมายผู้ใช้ที่คุณต้องการ ส่วนนี้ จะอธิบายขั้นตอนในคอนโซล Firebase เพื่อสร้างค่าเหล่านี้
- เปิดโปรเจ็กต์ในคอนโซล Firebase
- เลือกการกำหนดค่าระยะไกลจากเมนูเพื่อดูการกำหนดค่าระยะไกล หน้าแดชบอร์ด
- กำหนดพารามิเตอร์ด้วยชื่อเดียวกับพารามิเตอร์ที่คุณกำหนดใน แอปของคุณ สำหรับแต่ละพารามิเตอร์ คุณสามารถกำหนดค่าเริ่มต้น (ซึ่ง ลบล้างค่าเริ่มต้นในแอปในที่สุด) และคุณยังสามารถตั้งค่า ค่าแบบมีเงื่อนไข ดูข้อมูลเพิ่มเติมได้ที่ พารามิเตอร์และเงื่อนไขการกำหนดค่าระยะไกล
ขั้นตอนที่ 5: ดึงข้อมูลและเปิดใช้งานค่า
หากต้องการดึงค่าพารามิเตอร์จากการกำหนดค่าระยะไกล ให้เรียกเมธอด
fetchWithCompletionHandler:
หรือ
fetchWithExpirationDuration:completionHandler:
ระบบจะดึงข้อมูลค่าใดก็ตามที่คุณกำหนดไว้ในแบ็กเอนด์และ
แคชในออบเจ็กต์การกำหนดค่าระยะไกล
สำหรับกรณีที่คุณต้องการดึงข้อมูลและเปิดใช้งานค่าในการเรียกครั้งเดียว ให้ใช้
fetchAndActivateWithCompletionHandler:
.
ตัวอย่างนี้ดึงค่าจากแบ็กเอนด์การกำหนดค่าระยะไกล (ไม่ได้แคช
) และการโทร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: ฟังข้อมูลอัปเดตแบบเรียลไทม์
หลังจากดึงข้อมูลค่าพารามิเตอร์แล้ว คุณจะใช้การกำหนดค่าระยะไกลแบบเรียลไทม์เพื่อทำสิ่งต่อไปนี้ได้ รอฟังอัปเดตจากแบ็กเอนด์การกำหนดค่าระยะไกล เรียลไทม์ สัญญาณการกำหนดค่าระยะไกลไปยังอุปกรณ์ที่เชื่อมต่อเมื่อมีการอัปเดต และ ดึงข้อมูลการเปลี่ยนแปลงโดยอัตโนมัติหลังจากที่คุณเผยแพร่การกำหนดค่าระยะไกลใหม่ เวอร์ชัน
Firebase SDK สำหรับแพลตฟอร์ม Apple เวอร์ชัน 10.7.0 ขึ้นไปรองรับการอัปเดตแบบเรียลไทม์
ในแอป ให้โทรหา
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]; }); }]; } }];
ครั้งต่อไปที่คุณเผยแพร่การกำหนดค่าระยะไกลเวอร์ชันใหม่ อุปกรณ์ ที่กำลังเรียกใช้แอปของคุณและรอรับการเปลี่ยนแปลงจะแสดงการเสร็จสมบูรณ์ เครื่องจัดการ
การควบคุม
หากแอปดึงข้อมูลหลายครั้งเกินไปในช่วงเวลาสั้นๆ การดึงข้อมูลจะ
มีการควบคุมและ SDK กลับมา
FIRRemoteConfigFetchStatusThrottled
. ก่อน SDK เวอร์ชัน 6.3.0
ขีดจำกัดคือคำขอดึงข้อมูล 5 รายการใน 60 นาที
(เวอร์ชันใหม่จะมีขีดจำกัดที่อนุญาตมากกว่า)
ระหว่างการพัฒนาแอป คุณอาจต้องการดึงข้อมูลบ่อยขึ้นเพื่อรีเฟรชแคช
บ่อยมาก (หลายครั้งต่อชั่วโมง) เพื่อให้คุณปรับปรุง
ได้อย่างรวดเร็วเมื่อคุณพัฒนา
และทดสอบแอป การอัปเดตการกำหนดค่าระยะไกลแบบเรียลไทม์จะข้าม
แคชเมื่อมีการอัปเดตการกำหนดค่าในเซิร์ฟเวอร์ รองรับการปรับปรุงซ้ำอย่างรวดเร็ว
ในโครงการที่มีนักพัฒนาซอฟต์แวร์จำนวนมาก คุณสามารถเพิ่ม
พร็อพเพอร์ตี้ FIRRemoteConfigSettings
ที่มีช่วงเวลาการดึงข้อมูลขั้นต่ำต่ำ
(MinimumFetchInterval
) ในแอปของคุณ
ช่วงการดึงข้อมูลเวอร์ชันที่ใช้งานจริงเริ่มต้นและที่แนะนำสำหรับการกำหนดค่าระยะไกล คือ 12 ชั่วโมง หมายความว่าระบบจะไม่ดึงข้อมูลการกำหนดค่าจากแบ็กเอนด์มากกว่า 1 ครั้งใน 12 ชั่วโมง โดยไม่คำนึงถึงว่ามีการดึงข้อมูลจริงๆ เป็นจำนวนเท่าใด โดยเฉพาะอย่างยิ่ง ช่วงเวลาการดึงข้อมูลขั้นต่ำจะกำหนดตามลำดับต่อไปนี้
- พารามิเตอร์ใน
fetch(long)
- พารามิเตอร์ใน
FIRRemoteConfigSettings.MinimumFetchInterval
- ค่าเริ่มต้นคือ 12 ชั่วโมง
ขั้นตอนถัดไป
หากยังไม่ได้สำรวจการกำหนดค่าระยะไกล ให้ดูการกำหนดค่าระยะไกล กรณีการใช้งาน แล้วลองดูที่ แนวคิดหลักและเอกสารกลยุทธ์ขั้นสูง ได้แก่