Wprowadzenie do Zdalnej konfiguracji Firebase


Za pomocą Zdalnej konfiguracji Firebase możesz definiować parametry w aplikacji i aktualizować ich wartości w chmurze, co pozwala zmieniać wygląd i działanie aplikacji bez jej aktualizowania. Ten przewodnik przedstawia krok po kroku, od czego zacząć, oraz przykładowy kod, który możesz skopiować lub pobrać z repozytorium GitHub firebase/quickstart-android.

Krok 1. Dodaj Firebase i pakiet SDK Zdalnej konfiguracji do aplikacji

  1. Dodaj Firebase do swojego projektu na Androida, jeśli jeszcze go nie masz.

  2. W przypadku Zdalnej konfiguracji usługa Google Analytics jest wymagana do kierowania warunkowego instancji aplikacji na właściwości użytkownika i odbiorców. Pamiętaj, aby włączyć Google Analytics w projekcie.

  3. W pliku Gradle na poziomie modułu (na poziomie aplikacji) (zwykle <project>/<app-module>/build.gradle.kts lub <project>/<app-module>/build.gradle) dodaj zależność z biblioteką Zdalnej konfiguracji na Androida. Do kontrolowania obsługi wersji biblioteki zalecamy używanie BOM Firebase na Androida.

    Podczas konfigurowania Analytics musisz też dodać do aplikacji pakiet SDK Firebase dla 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")
    }
    

    Dzięki wykorzystaniu BM od Firebase Android Twoja aplikacja zawsze będzie używała zgodnych wersji bibliotek Firebase na Androida.

    (Alternatywnie) Dodaj zależności biblioteki Firebase bez użycia BoM.

    Jeśli nie chcesz używać BoM Firebase, musisz określić każdą wersję biblioteki Firebase w wierszu zależności.

    Pamiętaj, że jeśli w aplikacji używasz wielu bibliotek Firebase, zdecydowanie zalecamy korzystanie z BoM do zarządzania wersjami biblioteki. Zapewni to zgodność wszystkich wersji.

    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")
    }
    
    Szukasz modułu biblioteki dotyczącego konkretnego narzędzia Kotlin? Od października 2023 r. (Firebase BoM w wersji 32.5.0) deweloperzy korzystający z Kotlin i Javy mogą korzystać z modułu biblioteki głównej (szczegółowe informacje znajdziesz w odpowiedziach na najczęstsze pytania na temat tej inicjatywy).

Krok 2. Pobierz obiekt typu singleton Zdalnej konfiguracji

Pobierz instancję obiektu Zdalnej konfiguracji i ustaw minimalny odstęp czasu pobierania, który umożliwi częste odświeżanie:

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

Obiekt typu singleton służy do przechowywania domyślnych wartości parametrów w aplikacji, pobierania zaktualizowanych wartości parametrów z backendu oraz kontrolowania, kiedy pobrane wartości mają być dostępne dla aplikacji.

W trakcie programowania zalecane jest ustawienie stosunkowo niskiego minimalnego okresu pobierania. Więcej informacji znajdziesz w sekcji Ograniczanie.

Krok 3. Ustaw domyślne wartości parametrów w aplikacji

Domyślne wartości parametrów w aplikacji możesz ustawić w obiekcie Zdalnej konfiguracji, aby aplikacja zachowywała się zgodnie z oczekiwaniami przed nawiązaniem połączenia z backendem Zdalnej konfiguracji. Jeśli w backendzie nie ma ustawionych żadnych wartości domyślnych, będą dostępne wartości domyślne.

  1. Zdefiniuj zbiór nazw i domyślnych wartości parametrów za pomocą obiektu Map lub pliku zasobów XML zapisanego w folderze res/xml aplikacji. Przykładowa aplikacja z szybkim wprowadzeniem do Zdalnej konfiguracji używa pliku XML do definiowania domyślnych nazw i wartości parametrów.

    Jeśli masz już skonfigurowane wartości parametrów backendu Zdalnej konfiguracji, możesz pobrać wygenerowany plik XML ze wszystkimi wartościami domyślnymi i zapisać go w katalogu res/xml swojej aplikacji:

    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
    

    Konsola Firebase

    1. Na karcie Parametry otwórz Menu i wybierz Pobierz wartości domyślne.

    2. Gdy pojawi się prośba, włącz plik .xml na Androida, a potem kliknij Pobierz plik.

  2. Dodaj te wartości do obiektu Zdalnej konfiguracji za pomocą setDefaultsAsync(int), jak pokazano poniżej:

    Kotlin+KTX

    remoteConfig.setDefaultsAsync(R.xml.remote_config_defaults)

    Java

    mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);

Krok 4. Pobierz wartości parametrów do wykorzystania w aplikacji

Teraz możesz pobierać wartości parametrów z obiektu Zdalnej konfiguracji. Jeśli ustawisz wartości w backendzie, pobierzesz je i aktywujesz, staną się one dostępne dla Twojej aplikacji. W przeciwnym razie wartości parametrów w aplikacji zostaną skonfigurowane za pomocą narzędzia setDefaultsAsync(int). Aby uzyskać te wartości, wywołaj podaną poniżej metodę, która mapuje typ danych oczekiwany przez Twoją aplikację, podając klucz parametru jako argument:

Krok 5. Ustaw wartości parametrów w backendzie Zdalnej konfiguracji

Za pomocą konsoli Firebase lub interfejsów API backendu Zdalnej konfiguracji możesz tworzyć po stronie serwera nowe wartości domyślne, które zastępują wartości w aplikacji zgodnie z wybraną logiką warunkową lub kierowaniem na użytkowników. W tej sekcji znajdziesz instrukcje tworzenia tych wartości w konsoli Firebase.

  1. Otwórz projekt w konsoli Firebase.
  2. Wybierz z menu Zdalna konfiguracja, aby wyświetlić panel Zdalnej konfiguracji.
  3. Zdefiniuj parametry o takich samych nazwach jak parametry zdefiniowane w aplikacji. Dla każdego parametru możesz ustawić wartość domyślną (która ostatecznie zastąpi odpowiednią wartość domyślną w aplikacji). Możesz też ustawić wartości warunkowe. Więcej informacji znajdziesz w artykule Parametry i warunki Zdalnej konfiguracji.

Krok 6. Pobierz i aktywuj wartości

  1. Aby pobrać wartości parametrów z backendu Zdalnej konfiguracji, wywołaj metodę fetch(). Wszystkie wartości ustawione w backendzie są pobierane i zapisywane w obiekcie Zdalnej konfiguracji.
  2. Aby udostępnić aplikacji pobrane wartości parametrów, wywołaj metodę activate().

    Jeśli chcesz pobrać i aktywować wartości w ramach jednego wywołania, możesz użyć żądania fetchAndActivate(), aby pobrać wartości z backendu Zdalnej konfiguracji i udostępnić je aplikacji:

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

Te zaktualizowane wartości parametrów mają wpływ na działanie i wygląd aplikacji, dlatego należy aktywować pobrane wartości w czasie umożliwiającym bezproblemowe korzystanie z aplikacji, np. przy następnym uruchomieniu przez niego aplikacji. Więcej informacji i przykładów znajdziesz w artykule Strategie ładowania Zdalnej konfiguracji.

Krok 7. Nasłuchuj aktualizacji w czasie rzeczywistym

Po pobraniu wartości parametrów możesz za pomocą Zdalnej konfiguracji w czasie rzeczywistym nasłuchiwać aktualizacji z backendu Zdalnej konfiguracji. Zdalna konfiguracja w czasie rzeczywistym sygnalizuje połączone urządzenia, gdy dostępne są aktualizacje, i automatycznie pobiera zmiany po opublikowaniu nowej wersji Zdalnej konfiguracji.

Aktualizacje w czasie rzeczywistym są obsługiwane przez pakiet SDK Firebase na Androida w wersji 21.3.0 lub nowszej (Firebase BoM w wersji 31.2.4 lub nowszej).

  1. Użyj w aplikacji polecenia addOnConfigUpdateListener(), aby zacząć nasłuchiwać aktualizacji i automatycznie pobierać nowe wartości parametrów. Zaimplementuj wywołanie zwrotne onUpdate(), aby aktywować zaktualizowaną konfigurację.

    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. Gdy następnym razem opublikujesz nową wersję Zdalnej konfiguracji, urządzenia, na których działa Twoja aplikacja i nasłuchują zmian, wywołają funkcję ConfigUpdateListener.

Ograniczenia

Jeśli aplikacja pobiera zbyt wiele razy w krótkim okresie, wywołania pobierania są ograniczane, a pakiet SDK zwraca FirebaseRemoteConfigFetchThrottledException. Przed pakietem SDK w wersji 17.0.0 limit wynosił 5 żądań pobierania w 60-minutowym okresie (nowsze wersje mają bardziej rygorystyczne limity).

Podczas tworzenia aplikacji możesz często pobierać i aktywować konfiguracje, aby przyspieszyć jej tworzenie i testowanie. Aktualizacje Zdalnej konfiguracji w czasie rzeczywistym automatycznie pomijają pamięć podręczną po zaktualizowaniu konfiguracji na serwerze. Aby przeprowadzić szybką iterację w projekcie obejmującym maksymalnie 10 programistów, możesz tymczasowo ustawić w aplikacji obiekt FirebaseRemoteConfigSettings z niskim minimalnym interwałem pobierania (setMinimumFetchIntervalInSeconds).

Domyślny minimalny odstęp czasu pobierania w przypadku Zdalnej konfiguracji to 12 godzin, co oznacza, że konfiguracja nie będzie pobierana z backendu więcej niż raz w ciągu 12 godzin, niezależnie od tego, ile rzeczywiście zostanie wywołanych. W szczególności minimalny interwał pobierania jest określany w tej kolejności:

  1. Parametr w pliku fetch(long)
  2. Parametr w pliku FirebaseRemoteConfigSettings.setMinimumFetchIntervalInSeconds(long)
  3. Wartość domyślna to 12 godzin.

Aby ustawić minimalny interwał pobierania na wartość niestandardową, użyj funkcji FirebaseRemoteConfigSettings.Builder.setMinimumFetchIntervalInSeconds(long).

Dalsze kroki

Zapoznaj się z przypadkami użycia Zdalnej konfiguracji oraz dokumentacją kluczowych pojęć i zaawansowanych strategii, takich jak: