คุณใช้ Firebase Remote Config เพื่อกำหนดพารามิเตอร์ในแอปและอัปเดตค่าในระบบคลาวด์ได้ ซึ่งจะช่วยให้คุณแก้ไขรูปลักษณ์และลักษณะการทำงานของแอปได้โดยไม่ต้องเผยแพร่การอัปเดตแอป คู่มือนี้จะแนะนำขั้นตอนการเริ่มต้นใช้งานและแสดง ตัวอย่างโค้ด ซึ่งทั้งหมดนี้พร้อมให้โคลนหรือดาวน์โหลดจากที่เก็บ GitHub ของ firebase/quickstart-android
ขั้นตอนที่ 1: เพิ่ม Firebase และ SDK การกำหนดค่าระยะไกลลงในแอป
หากยังไม่ได้ดำเนินการ ให้เพิ่ม Firebase ลงในโปรเจ็กต์ Android
สําหรับ Remote Config Google Analytics ต้องใช้สําหรับ การกําหนดเป้าหมายแบบมีเงื่อนไขของอินสแตนซ์แอป ไปยังพร็อพเพอร์ตี้ผู้ใช้และกลุ่มเป้าหมาย ตรวจสอบว่าคุณได้เปิดใช้ Google Analytics ในโปรเจ็กต์แล้ว
ในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติคือ
<project>/<app-module>/build.gradle.kts
หรือ<project>/<app-module>/build.gradle
) ให้เพิ่มทรัพยากร Dependency สำหรับคลัง Remote Config สำหรับ Android เราขอแนะนำให้ใช้ Firebase Android BoM เพื่อควบคุมการควบคุมเวอร์ชันของไลบรารีนอกจากนี้ ในขั้นตอนการตั้งค่า Analytics คุณต้องเพิ่ม Firebase SDK สําหรับ Google Analytics ลงในแอปด้วย
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.16.0")) // Add the dependencies for the Remote Config and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-config") implementation("com.google.firebase:firebase-analytics") }
การใช้ Firebase Android BoM จะทำให้แอปใช้ไลบรารี Firebase Android เวอร์ชันที่เข้ากันได้อยู่เสมอ
(ทางเลือก) เพิ่มการอ้างอิงไลบรารี Firebase โดยไม่ใช้ BoM
หากเลือกไม่ใช้ Firebase BoM คุณต้องระบุเวอร์ชันของไลบรารี Firebase แต่ละรายการ ในบรรทัดการอ้างอิง
โปรดทราบว่าหากคุณใช้ไลบรารี Firebase หลายรายการในแอป เราขอแนะนำเป็นอย่างยิ่ง ให้ใช้ BoM เพื่อจัดการเวอร์ชันของไลบรารี ซึ่งจะช่วยให้มั่นใจได้ว่าทุกเวอร์ชันจะ เข้ากันได้
dependencies { // Add the dependencies for the Remote Config and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-config:22.1.2") implementation("com.google.firebase:firebase-analytics:22.5.0") }
ขั้นตอนที่ 2: รับRemote Configออบเจ็กต์ Singleton
สร้างอินสแตนซ์ออบเจ็กต์ Remote Config แล้วตั้งค่า ช่วงเวลาขั้นต่ำสำหรับการดึงข้อมูลเพื่อให้มีการรีเฟรชบ่อยๆ
Kotlin
val remoteConfig: FirebaseRemoteConfig = Firebase.remoteConfig val configSettings = remoteConfigSettings { minimumFetchIntervalInSeconds = 3600 } remoteConfig.setConfigSettingsAsync(configSettings)
Java
FirebaseRemoteConfig mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance(); FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder() .setMinimumFetchIntervalInSeconds(3600) .build(); mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
ออบเจ็กต์ Singleton ใช้เพื่อจัดเก็บค่าพารามิเตอร์เริ่มต้นในแอป ดึงค่าพารามิเตอร์ที่อัปเดตจากแบ็กเอนด์ และควบคุมเวลาที่ค่าที่ดึงมาพร้อมใช้งานในแอป
ในระหว่างการพัฒนา เราขอแนะนำให้ตั้งค่าช่วงเวลาการดึงข้อมูลขั้นต่ำให้ค่อนข้างต่ำ ดูข้อมูลเพิ่มเติมได้ที่การควบคุมอัตรา
ขั้นตอนที่ 3: ตั้งค่าพารามิเตอร์เริ่มต้นในแอป
คุณสามารถตั้งค่าพารามิเตอร์เริ่มต้นในแอปในRemote Config ออบเจ็กต์ เพื่อให้แอปทํางานตามที่ต้องการก่อนที่จะเชื่อมต่อกับแบ็กเอนด์ของ Remote Config และเพื่อให้มีค่าเริ่มต้นในกรณีที่ไม่ได้ตั้งค่าใดๆ ในแบ็กเอนด์
กำหนดชุดชื่อพารามิเตอร์และค่าพารามิเตอร์เริ่มต้นโดยใช้ออบเจ็กต์ Map หรือไฟล์ทรัพยากร XML ที่จัดเก็บไว้ในโฟลเดอร์
res/xml
ของแอป แอปตัวอย่างRemote Configเริ่มต้นอย่างรวดเร็ว ใช้ไฟล์ XML เพื่อกำหนดชื่อและค่าพารามิเตอร์เริ่มต้นหากกำหนดค่าRemote Configค่าพารามิเตอร์แบ็กเอนด์แล้ว คุณสามารถดาวน์โหลดไฟล์ XML ที่สร้างขึ้นซึ่งมีค่าเริ่มต้นทั้งหมดและ บันทึกลงในไดเรกทอรี
res/xml
ของแอปได้โดยทำดังนี้REST
curl --compressed -D headers -H "Authorization: Bearer token" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=XML -o remote_config_defaults.xml
Firebase คอนโซล
ในแท็บพารามิเตอร์ ให้เปิด เมนู แล้ว เลือกดาวน์โหลดค่าเริ่มต้น
เมื่อระบบแจ้ง ให้เปิดใช้ .xml สำหรับ Android แล้วคลิกดาวน์โหลดไฟล์
เพิ่มค่าเหล่านี้ลงในออบเจ็กต์ Remote Config โดยใช้
setDefaultsAsync(int)
ดังที่แสดงKotlin
remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)
Java
mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);
ขั้นตอนที่ 4: รับค่าพารามิเตอร์เพื่อใช้ในแอป
ตอนนี้คุณรับค่าพารามิเตอร์จากออบเจ็กต์ Remote Config ได้แล้ว หากคุณตั้งค่าในแบ็กเอนด์ ดึงข้อมูล แล้วเปิดใช้งาน ค่าเหล่านั้นจะพร้อมใช้งานในแอปของคุณ มิฉะนั้น คุณจะได้รับค่าพารามิเตอร์ในแอปที่กำหนดค่าโดยใช้ setDefaultsAsync(int)
หากต้องการรับค่าเหล่านี้ ให้เรียกใช้เมธอดที่ระบุไว้ด้านล่างซึ่งแมปกับประเภทข้อมูล
ที่แอปคาดหวัง โดยระบุคีย์พารามิเตอร์เป็นอาร์กิวเมนต์
ขั้นตอนที่ 5: ตั้งค่าพารามิเตอร์ในRemote Configแบ็กเอนด์
การใช้FirebaseคอนโซลหรือRemote ConfigAPI แบ็กเอนด์ จะช่วยให้คุณสร้างค่าเริ่มต้นฝั่งเซิร์ฟเวอร์ใหม่ที่ลบล้างค่าในแอป ตามตรรกะแบบมีเงื่อนไขหรือการกำหนดเป้าหมายผู้ใช้ที่ต้องการได้ ส่วนนี้ อธิบายFirebaseขั้นตอนในคอนโซลเพื่อสร้างค่าเหล่านี้
- เปิดโปรเจ็กต์ในคอนโซล Firebase
- เลือก Remote Config จากเมนูเพื่อดูRemote Config แดชบอร์ด
- กําหนดพารามิเตอร์ที่มีชื่อเดียวกับพารามิเตอร์ที่คุณกําหนดไว้ใน แอป สําหรับพารามิเตอร์แต่ละรายการ คุณสามารถตั้งค่าเริ่มต้น (ซึ่งจะ ลบล้างค่าเริ่มต้นในแอปที่เกี่ยวข้องในที่สุด) และยังตั้งค่าแบบมีเงื่อนไขได้ด้วย ดูข้อมูลเพิ่มเติมได้ที่Remote Config พารามิเตอร์และ เงื่อนไข
หากใช้เงื่อนไข สัญญาณที่กำหนดเอง ให้กำหนดแอตทริบิวต์และค่าของแอตทริบิวต์ ตัวอย่างต่อไปนี้แสดงวิธี กำหนดเงื่อนไขสัญญาณที่กำหนดเอง
Kotlin
val customSignals = customSignals { put("city", "Tokyo") put("preferred_event_category", "sports") } remoteConfig.setCustomSignals(customSignals)
Java
CustomSignals customSignals = new CustomSignals.Builder() .put("city", "Tokyo") .put("preferred_event_category", "sports") .build(); mFirebaseRemoteConfig.setCustomSignals(customSignals);
ขั้นตอนที่ 6: ดึงข้อมูลและเปิดใช้งานค่า
- หากต้องการดึงค่าพารามิเตอร์จากแบ็กเอนด์ Remote Config ให้เรียกใช้เมธอด
fetch()
ระบบจะดึงค่าที่คุณตั้งไว้ในแบ็กเอนด์ และจัดเก็บไว้ในออบเจ็กต์ Remote Config หากต้องการทำให้ค่าพารามิเตอร์ที่ดึงข้อมูลมาพร้อมใช้งานในแอป ให้เรียกใช้เมธอด
activate()
ในกรณีที่คุณต้องการดึงข้อมูลและเปิดใช้งานค่าในการเรียกครั้งเดียว คุณ สามารถใช้คำขอ
fetchAndActivate()
เพื่อดึงข้อมูลค่าจากแบ็กเอนด์ Remote Config และทำให้ค่าพร้อมใช้งานในแอปได้Kotlin
remoteConfig.fetchAndActivate() .addOnCompleteListener(this) { task -> if (task.isSuccessful) { val updated = task.result Log.d(TAG, "Config params updated: $updated") Toast.makeText( this, "Fetch and activate succeeded", Toast.LENGTH_SHORT, ).show() } else { Toast.makeText( this, "Fetch failed", Toast.LENGTH_SHORT, ).show() } displayWelcomeMessage() }
Java
mFirebaseRemoteConfig.fetchAndActivate() .addOnCompleteListener(this, new OnCompleteListener<Boolean>() { @Override public void onComplete(@NonNull Task<Boolean> task) { if (task.isSuccessful()) { boolean updated = task.getResult(); Log.d(TAG, "Config params updated: " + updated); Toast.makeText(MainActivity.this, "Fetch and activate succeeded", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "Fetch failed", Toast.LENGTH_SHORT).show(); } displayWelcomeMessage(); } });
เนื่องจากค่าพารามิเตอร์ที่อัปเดตเหล่านี้ส่งผลต่อลักษณะการทำงานและลักษณะที่ปรากฏ ของแอป คุณจึงควรเปิดใช้งานค่าที่ดึงมาในเวลาที่รับประกันได้ว่าผู้ใช้จะได้รับประสบการณ์ที่ราบรื่น เช่น ครั้งถัดไปที่ผู้ใช้เปิดแอปของคุณ ดูข้อมูลและตัวอย่างเพิ่มเติมได้ที่กลยุทธ์การโหลดการกำหนดค่าระยะไกล
ขั้นตอนที่ 7: ฟังข้อมูลอัปเดตแบบเรียลไทม์
หลังจากดึงค่าพารามิเตอร์แล้ว คุณจะใช้ Remote Config แบบเรียลไทม์เพื่อ ฟังการอัปเดตจากแบ็กเอนด์ของ Remote Config ได้ สัญญาณแบบเรียลไทม์ Remote Configไปยังอุปกรณ์ที่เชื่อมต่อเมื่อมีการอัปเดตและ ดึงข้อมูลการเปลี่ยนแปลงโดยอัตโนมัติหลังจากที่คุณเผยแพร่Remote Config เวอร์ชันใหม่
Firebase SDK สำหรับ Android v21.3.0 ขึ้นไป (Firebase BoM v31.2.4 ขึ้นไป) รองรับการอัปเดตแบบเรียลไทม์
ในแอป ให้ใช้
addOnConfigUpdateListener()
เพื่อเริ่มฟังการอัปเดต และดึงค่าพารามิเตอร์ใหม่โดยอัตโนมัติ ใช้onUpdate()
การเรียกกลับเพื่อเปิดใช้งานการกำหนดค่าที่อัปเดตแล้วKotlin
remoteConfig.addOnConfigUpdateListener(object : ConfigUpdateListener { override fun onUpdate(configUpdate : ConfigUpdate) { Log.d(TAG, "Updated keys: " + configUpdate.updatedKeys); if (configUpdate.updatedKeys.contains("welcome_message")) { remoteConfig.activate().addOnCompleteListener { displayWelcomeMessage() } } } override fun onError(error : FirebaseRemoteConfigException) { Log.w(TAG, "Config update error with code: " + error.code, error) } })
Java
mFirebaseRemoteConfig.addOnConfigUpdateListener(new ConfigUpdateListener() { @Override public void onUpdate(ConfigUpdate configUpdate) { Log.d(TAG, "Updated keys: " + configUpdate.getUpdatedKeys()); mFirebaseRemoteConfig.activate().addOnCompleteListener(new OnCompleteListener<Boolean>() { @Override public void onComplete(@NonNull Task<Boolean> task) { displayWelcomeMessage(); } }); } @Override public void onError(FirebaseRemoteConfigException error) { Log.w(TAG, "Config update error with code: " + error.getCode(), error); } });
ในครั้งถัดไปที่คุณเผยแพร่ Remote Config เวอร์ชันใหม่ อุปกรณ์ ที่เรียกใช้แอปและรอฟังการเปลี่ยนแปลงจะเรียกใช้
ConfigUpdateListener
การควบคุม
หากแอปดึงข้อมูลหลายครั้งเกินไปในช่วงเวลาสั้นๆ ระบบจะจำกัดอัตราการเรียกดึงข้อมูลและ SDK จะแสดง FirebaseRemoteConfigFetchThrottledException
ก่อน SDK เวอร์ชัน 17.0.0
ขีดจำกัดคือคำขอเรียกข้อมูล 5 รายการในหน้าต่าง 60 นาที (เวอร์ชันใหม่กว่ามีขีดจำกัดที่อนุญาตมากกว่า)
ในระหว่างการพัฒนาแอป คุณอาจต้องการดึงและเปิดใช้งานการกำหนดค่าบ่อยมาก (หลายครั้งต่อชั่วโมง) เพื่อให้คุณทำซ้ำได้อย่างรวดเร็วขณะพัฒนาและทดสอบแอป การอัปเดตแบบเรียลไทม์Remote Configจะข้ามแคชโดยอัตโนมัติ
เมื่อมีการอัปเดตการกำหนดค่าในเซิร์ฟเวอร์ หากต้องการรองรับการทำซ้ำอย่างรวดเร็ว
ในโปรเจ็กต์ที่มีนักพัฒนาแอปไม่เกิน 10 คน คุณสามารถตั้งค่า
FirebaseRemoteConfigSettings
ออบเจ็กต์ที่มีช่วงเวลาขั้นต่ำสำหรับการดึงข้อมูลต่ำ
(setMinimumFetchIntervalInSeconds
) ในแอปชั่วคราวได้
ช่วงเวลาการดึงข้อมูลขั้นต่ำเริ่มต้นสำหรับ Remote Config คือ 12 ชั่วโมง ซึ่งหมายความว่าระบบจะไม่ดึงข้อมูลการกำหนดค่าจากแบ็กเอนด์มากกว่า 1 ครั้งในกรอบเวลา 12 ชั่วโมง ไม่ว่าจะมีจำนวนการเรียกดึงข้อมูลจริงกี่ครั้งก็ตาม โดยเฉพาะอย่างยิ่ง ระบบจะกำหนด ช่วงเวลาการดึงข้อมูลขั้นต่ำตามลำดับต่อไปนี้
- พารามิเตอร์ใน
fetch(long)
- พารามิเตอร์ใน
FirebaseRemoteConfigSettings.setMinimumFetchIntervalInSeconds(long)
- ค่าเริ่มต้นคือ 12 ชั่วโมง
หากต้องการตั้งค่าช่วงเวลาการดึงข้อมูลขั้นต่ำเป็นค่าที่กำหนดเอง ให้ใช้ FirebaseRemoteConfigSettings.Builder.setMinimumFetchIntervalInSeconds(long)
ขั้นตอนถัดไป
หากยังไม่ได้สำรวจ Remote Config กรณีการใช้งาน และดูเอกสารประกอบเกี่ยวกับแนวคิดหลักและกลยุทธ์ขั้นสูงบางส่วน ซึ่งรวมถึง