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


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

ขั้นตอนที่ 1: เพิ่ม Firebase และ SDK การกำหนดค่าระยะไกลลงในแอป

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

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

  3. ในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติจะเป็น <project>/<app-module>/build.gradle.kts หรือ <project>/<app-module>/build.gradle) ให้เพิ่มทรัพยากร Dependency สำหรับไลบรารีการกำหนดค่าระยะไกลสำหรับ Android เราขอแนะนำให้ใช้ Firebase Android BoM เพื่อควบคุมเวอร์ชันไลบรารี

    นอกจากนี้ ในการตั้งค่า Analytics คุณต้องเพิ่ม Firebase SDK สำหรับ Google Analytics ลงในแอปของคุณด้วย

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:32.8.1"))
    
        // 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 เวอร์ชันที่เข้ากันได้เสมอ

    (ทางเลือก) เพิ่มทรัพยากร Dependency ของไลบรารี Firebase โดยไม่ใช้ BoM

    หากเลือกไม่ใช้ Firebase BoM คุณต้องระบุเวอร์ชันไลบรารี Firebase แต่ละเวอร์ชันในบรรทัดทรัพยากร Dependency

    โปรดทราบว่าหากคุณใช้ไลบรารี 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:21.6.3")
        implementation("com.google.firebase:firebase-analytics:21.6.2")
    }
    
    หากกำลังมองหาโมดูลไลบรารีสำหรับ Kotlin โดยเฉพาะ ตั้งแต่เดือนตุลาคม 2023 (Firebase BoM 32.5.0) ทั้งนักพัฒนาซอฟต์แวร์ Kotlin และ Java จะขึ้นอยู่กับโมดูลไลบรารีหลักได้ (ดูรายละเอียดได้ที่คำถามที่พบบ่อยเกี่ยวกับโครงการริเริ่มนี้)

ขั้นตอนที่ 2: ดาวน์โหลดออบเจ็กต์ Singleton สำหรับการกำหนดค่าระยะไกล

รับอินสแตนซ์ของออบเจ็กต์การกำหนดค่าระยะไกลและตั้งค่าช่วงการดึงข้อมูลขั้นต่ำเพื่อให้มีการรีเฟรชบ่อยๆ ดังนี้

Kotlin+KTX

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: ตั้งค่าค่าพารามิเตอร์เริ่มต้นในแอป

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

  1. กำหนดชุดของชื่อพารามิเตอร์และค่าพารามิเตอร์เริ่มต้นโดยใช้ออบเจ็กต์ Map หรือไฟล์ทรัพยากร XML ที่จัดเก็บไว้ในโฟลเดอร์ res/xml ของแอป แอปตัวอย่างการเริ่มต้นอย่างรวดเร็วสำหรับการกำหนดค่าระยะไกลใช้ไฟล์ XML เพื่อกำหนดชื่อและค่าพารามิเตอร์เริ่มต้น

    หากกำหนดค่าพารามิเตอร์แบ็กเอนด์ของการกำหนดค่าระยะไกลไว้แล้ว คุณจะดาวน์โหลดไฟล์ 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

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

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

  2. เพิ่มค่าเหล่านี้ลงในออบเจ็กต์การกำหนดค่าระยะไกลโดยใช้ setDefaultsAsync(int) ดังที่แสดง

    Kotlin+KTX

    remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)

    Java

    mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);

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

ตอนนี้คุณสามารถรับค่าพารามิเตอร์จากออบเจ็กต์การกำหนดค่าระยะไกล หากคุณกำหนดค่า ในแบ็กเอนด์ ให้ดึงข้อมูลแล้วเปิดใช้งาน ค่าเหล่านั้นจะพร้อมใช้งานในแอป มิฉะนั้นคุณจะกำหนดค่าพารามิเตอร์ในแอปที่กำหนดค่าโดยใช้ setDefaultsAsync(int) หากต้องการรับค่าเหล่านี้ ให้เรียกใช้เมธอดที่แสดงด้านล่างที่แมปกับประเภทข้อมูลที่แอปคาดการณ์ โดยระบุคีย์พารามิเตอร์เป็นอาร์กิวเมนต์

ขั้นตอนที่ 5: กำหนดค่าพารามิเตอร์ในแบ็กเอนด์การกำหนดค่าระยะไกล

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

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

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

  1. หากต้องการดึงค่าพารามิเตอร์จากแบ็กเอนด์การกำหนดค่าระยะไกล ให้เรียกใช้เมธอด fetch() ระบบจะดึงค่าที่คุณกำหนดในแบ็กเอนด์ขึ้นมา และจัดเก็บไว้ในออบเจ็กต์การกำหนดค่าระยะไกล
  2. หากต้องการทำให้ค่าพารามิเตอร์ที่ดึงข้อมูลมาใช้งานกับแอปได้ ให้เรียกใช้เมธอด activate()

    ในกรณีที่ต้องการดึงข้อมูลและเปิดใช้งานค่าในการเรียกครั้งเดียว ให้ใช้คำขอ fetchAndActivate() เพื่อดึงค่าจากแบ็กเอนด์การกำหนดค่าระยะไกลและทำให้ค่าดังกล่าวพร้อมใช้งานกับแอป ดังนี้

    Kotlin+KTX

    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: ฟังอัปเดตแบบเรียลไทม์

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

Firebase SDK สำหรับ Android เวอร์ชัน 21.3.0 ขึ้นไป (Firebase BoM v31.2.4 ขึ้นไป) รองรับการอัปเดตแบบเรียลไทม์

  1. ในแอป ให้ใช้ addOnConfigUpdateListener() เพื่อเริ่มฟังอัปเดตและดึงค่าพารามิเตอร์ใหม่โดยอัตโนมัติ ใช้โค้ดเรียกกลับ onUpdate() เพื่อเปิดใช้งานการกำหนดค่าที่อัปเดตแล้ว

    Kotlin+KTX

    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() {
                @Override
                public void onComplete(@NonNull Task task) {
                    displayWelcomeMessage();
                }
            });
        }
    
        @Override
        public void onError(FirebaseRemoteConfigException error) {
            Log.w(TAG, "Config update error with code: " + error.getCode(), error);
        }
    });
    
  2. ครั้งต่อไปที่คุณเผยแพร่การกำหนดค่าระยะไกลเวอร์ชันใหม่ อุปกรณ์ที่เรียกใช้แอปของคุณและรอฟังการเปลี่ยนแปลงจะเรียกใช้ ConfigUpdateListener

การควบคุม

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

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

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

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

หากต้องการตั้งช่วงการดึงข้อมูลขั้นต่ำเป็นค่าที่กำหนดเอง ให้ใช้ FirebaseRemoteConfigSettings.Builder.setMinimumFetchIntervalInSeconds(long)

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

ลองสำรวจกรณีการใช้งานการกำหนดค่าระยะไกลและดูเอกสารแนวคิดสำคัญและเอกสารกลยุทธ์ขั้นสูงต่อไปนี้หากยังไม่ได้ดู