Mulai Menggunakan Firebase Remote Config


Anda dapat menggunakan Firebase Remote Config untuk menetapkan parameter dalam aplikasi dan memperbarui nilainya di cloud, sehingga Anda dapat memodifikasi tampilan dan perilaku aplikasi tanpa mendistribusikan update aplikasi. Panduan ini akan menuntun Anda menjalankan langkah-langkah untuk memulai, serta menyediakan beberapa kode contoh, yang semuanya dapat di-clone atau didownload dari repositori GitHub firebase/quickstart-android.

Langkah 1: Menambahkan Firebase dan Remote Config SDK ke aplikasi

  1. Tambahkan Firebase ke project Android jika belum melakukannya.

  2. Untuk Remote Config, Google Analytics diperlukan untuk penargetan kondisional instance aplikasi ke properti pengguna dan audience. Pastikan Anda mengaktifkan Google Analytics di project Anda.

  3. Dalam file Gradle modul (level aplikasi), biasanya <project>/<app-module>/build.gradle.kts atau <project>/<app-module>/build.gradle, tambahkan dependensi untuk library Remote Config untuk Android. Sebaiknya gunakan Firebase Android BoM untuk mengontrol pembuatan versi library.

    Selain itu, sebagai bagian dari penyiapan Analytics, Anda perlu menambahkan Firebase SDK untuk Google Analytics ke aplikasi Anda.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.1.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")
    }
    

    Dengan menggunakan Firebase Android BoM, aplikasi Anda akan selalu menggunakan versi library Android Firebase yang kompatibel.

    (Alternatif) Tambahkan dependensi library Firebase tanpa menggunakan BoM

    Jika memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi library Firebase di baris dependensinya.

    Perlu diperhatikan bahwa jika Anda menggunakan beberapa library Firebase di aplikasi, sebaiknya gunakan BoM untuk mengelola versi library, yang memastikan bahwa semua versi kompatibel.

    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.0.0")
        implementation("com.google.firebase:firebase-analytics:22.0.2")
    }
    
    Mencari modul library khusus Kotlin? Mulai Oktober 2023 (Firebase BoM 32.5.0), developer Kotlin dan Java dapat bergantung pada modul library utama (untuk mengetahui detailnya, lihat FAQ tentang inisiatif ini).

Langkah 2: Mendapatkan objek singleton Remote Config

Dapatkan instance objek Remote Config dan tetapkan interval pengambilan minimum agar refresh sering terjadi:

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);

Objek singleton ini digunakan untuk menyimpan parameter value default dalam aplikasi, mengambil parameter value terbaru dari backend, dan mengontrol kapan nilai yang diambil akan tersedia untuk aplikasi Anda.

Selama pengembangan, sebaiknya tetapkan interval pengambilan minimum yang relatif rendah. Baca artikel mengenai Throttling untuk mengetahui informasi selengkapnya.

Langkah 3: Menetapkan parameter value default dalam aplikasi

Anda bisa menetapkan parameter value default dalam aplikasi di objek Remote Config agar aplikasi Anda berperilaku seperti yang diharapkan sebelum terhubung ke backend Remote Config, dan agar ada value default yang tersedia jika tidak ada value yang ditetapkan pada backend.

  1. Tetapkan satu set nama parameter dan parameter value default menggunakan objek Map atau file resource XML yang tersimpan di folder res/xml aplikasi Anda. Aplikasi contoh panduan memulai Remote Config menggunakan file XML untuk menetapkan nama parameter dan parameter value default.

    Jika sudah mengonfigurasi parameter value backend Remote Config, Anda dapat mendownload file XML yang dihasilkan yang mencakup semua nilai default dan menyimpannya ke direktori res/xml aplikasi:

    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 console

    1. Di tab Parameters, buka Menu, lalu pilih Download default values.

    2. Saat diminta, aktifkan .xml for Android, lalu klik Download file.

  2. Tambahkan nilai ini ke objek Remote Config menggunakan setDefaultsAsync(int), seperti yang ditunjukkan:

    Kotlin+KTX

    remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)

    Java

    mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);

Langkah 4: Mendapatkan parameter value yang akan digunakan dalam aplikasi

Sekarang Anda bisa mendapatkan parameter value dari objek Remote Config. Jika Anda menetapkan nilai di backend, mengambilnya, lalu mengaktifkannya, nilai tersebut akan tersedia untuk aplikasi Anda. Jika tidak, Anda akan mendapatkan parameter value dalam aplikasi yang dikonfigurasi menggunakan setDefaultsAsync(int). Untuk mendapatkan nilai ini, panggil metode yang tercantum di bawah ini sesuai jenis data yang diharapkan oleh aplikasi Anda, dengan kunci parameter sebagai argumen:

Langkah 5: Menetapkan parameter value di backend Remote Config

Dengan menggunakan Firebase console atau API backend Remote Config, Anda dapat membuat nilai default sisi server baru yang menggantikan nilai dalam aplikasi sesuai dengan penargetan pengguna atau logika kondisional yang diinginkan. Bagian ini menjelaskan langkah-langkah Firebase console untuk membuat nilai tersebut.

  1. Buka project Anda di Firebase console.
  2. Pilih Remote Config dari menu untuk melihat dasbor Remote Config.
  3. Tetapkan parameter dengan nama yang sama dengan parameter yang Anda tetapkan dalam aplikasi. Untuk setiap parameter, Anda dapat menetapkan nilai default (yang akan mengganti nilai default yang sesuai dalam aplikasi), dan Anda juga dapat menetapkan nilai kondisional. Untuk mempelajari lebih lanjut, baca artikel Parameter dan Kondisi Remote Config.

Langkah 6: Mengambil dan mengaktifkan nilai

  1. Untuk mengambil parameter value dari backend Remote Config, panggil metode fetch(). Setiap nilai yang Anda tetapkan dalam backend akan diambil dan disimpan di objek Remote Config.
  2. Agar parameter value yang diambil tersedia untuk aplikasi Anda, panggil metode activate().

    Jika ingin mengambil dan mengaktifkan nilai dalam satu panggilan, Anda dapat menggunakan permintaan fetchAndActivate() untuk mengambil nilai dari backend Remote Config dan menyediakannya untuk aplikasi:

    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();
                }
            });

Karena parameter value terbaru ini memengaruhi perilaku dan tampilan aplikasi, Anda harus mengaktifkan nilai yang diambil pada saat yang tepat untuk memastikan pengalaman yang lancar bagi pengguna, misalnya saat pengguna membuka aplikasi di waktu berikutnya. Lihat Strategi pemuatan Remote Config untuk mengetahui informasi dan contoh selengkapnya.

Langkah 7: Memproses update secara real time

Setelah mengambil parameter value, Anda dapat menggunakan Remote Config real-time untuk memproses update dari backend Remote Config. Sinyal Remote Config real-time ke perangkat yang terhubung saat update tersedia dan secara otomatis mengambil perubahan setelah Anda memublikasikan versi Remote Config baru.

Update real-time didukung oleh Firebase SDK untuk Android v21.3.0+ (Firebase BoM v31.2.4+).

  1. Di aplikasi Anda, gunakan addOnConfigUpdateListener() untuk mulai memproses update dan otomatis mengambil parameter value baru. Terapkan callback onUpdate() untuk mengaktifkan konfigurasi yang diperbarui.

    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. Jika kemudian Anda memublikasikan versi baru Remote Config, perangkat yang menjalankan aplikasi Anda dan memproses perubahan akan memanggil ConfigUpdateListener.

Throttling

Jika aplikasi terlalu sering melakukan pengambilan dalam jangka waktu yang singkat, panggilan pengambilan akan di-throttle dan SDK akan menampilkan FirebaseRemoteConfigFetchThrottledException. Sebelum SDK versi 17.0.0, batasnya adalah 5 permintaan pengambilan dalam jangka waktu 60 menit (versi yang lebih baru memiliki batas yang lebih fleksibel).

Selama pengembangan aplikasi, sebaiknya ambil dan aktifkan konfigurasi sesering mungkin (berkali-kali per jam) agar Anda dapat melakukan iterasi dengan cepat ketika mengembangkan dan menguji aplikasi. Update Remote Config real-time secara otomatis mengabaikan cache ketika konfigurasi diperbarui di server. Untuk mengakomodasi iterasi yang cepat pada project yang beranggotakan hingga 10 developer, Anda dapat menetapkan objek FirebaseRemoteConfigSettings dengan interval pengambilan minimum yang rendah (setMinimumFetchIntervalInSeconds) dalam aplikasi anda untuk sementara.

Interval pengambilan minimum default untuk Remote Config adalah 12 jam. Artinya, konfigurasi tidak akan diambil dari backend lebih dari sekali dalam jangka waktu 12 jam, terlepas dari berapa banyak panggilan pengambilan yang sebenarnya dilakukan. Secara khusus, interval pengambilan minimum ditentukan dengan urutan sebagai berikut:

  1. Parameter di fetch(long)
  2. Parameter di FirebaseRemoteConfigSettings.setMinimumFetchIntervalInSeconds(long)
  3. Nilai default 12 jam

Untuk menetapkan interval pengambilan minimum ke nilai kustom, gunakan FirebaseRemoteConfigSettings.Builder.setMinimumFetchIntervalInSeconds(long).

Langkah berikutnya

Pelajari kasus penggunaan Remote Config jika Anda belum melakukannya, dan lihat beberapa dokumentasi strategi lanjutan dan konsep utama, termasuk: