Firebase Remote Config је облачни сервис за управљање параметрима мобилне апликације, који омогућава промену њеног понашања, изгледа и садржаја без објављивања нове верзије у продавници апликација. За разлику од традиционалног приступа са циклусима издавања, Remote Config омогућава промену било којих подесивих параметара у реалном времену преко Firebase конзоле или REST API-ја. Према подацима Google Firebase (2026), сервис се користи у 65% апликација на Firebase платформи за A/B тестирање, персонализацију и оперативно управљање функцијама на клијентској страни.
Главне тачке
Firebase Remote Config је сервис који чува парове кључ-вредност на страни Firebase сервера и доставља их клијентским уређајима на захтев или по распореду. Сваки параметар има име (низ), вредност (низ, број, boolean или JSON) и може бити повезан са условима — правилима која одређују коју вредност добија одређени корисник. Услови могу проверавати верзију апликације, језик уређаја, регион, случајни проценат и многе друге атрибуте.
Архитектура Remote Config-а је изграђена на push-pull моделу са приоритетом pull-а. Клијент периодично захтева актуелне вредности са сервера (подразумевано сваких 12 сати). Међутим, програмер може покренути тренутну синхронизацију у коду или преко Firebase конзоле (дугме „Publish changes”). Након објављивања промена, сервер шаље push обавештење преко Firebase Cloud Messaging-а, и апликација, након пријема, може поново затражити параметре.
Бесплатни тариф Firebase Remote Config нема ограничења у броју параметара или захтева, што га разликује од других Firebase сервиса. Једино ограничење је величина одговора која не сме прелазити 800 KB (укупно за све параметре). Ово је сасвим довољно за типичан сценарио: већина пројеката користи 10–50 параметара, а њихова укупна величина ретко прелази 100 KB.
Механизам избора вредности се заснива на приоритету услова. Сваки услов представља правило (нпр. „iOS верзија > 15.0”). Remote Config проверава услове по редоследу приоритета и враћа вредност првог одговарајућег услова. Ако ниједан услов не одговара, користи се подразумевана вредност (default value). Овај механизам омогућава креирање хијерархије правила: од најспецифичнијег ка најопштијем.
Важно: редослед услова у Firebase конзоли је битан. Ако два услова могу истовремено одговарати истом кориснику, побеђује онај који је више на листи. Препоручује се постављање специфичнијих услова (нпр. за одређену верзију апликације) изнад општих (нпр. „Сви iOS корисници”). Нетачан редослед може довести до тога да се циљана промена никада не примени.
Подразумевано Remote Config кешира вредности примљене са сервера на 12 сати. То значи да након објављивања промена у конзоли, апликација неће видети промене раније од 12 сати (или након следећег експлицитног позива fetch). Минимално време кеширања може се подесити преко FirebaseRemoteConfigSettings(minimumFetchIntervalInSeconds: 3600) — за продукцију се препоручује најмање 1 сат како би се избегли прекомерни захтеви ка серверу и потрошња корисничког саобраћаја.
За тестирање промена током развоја користите минимални интервал од 0 секунди: FirebaseRemoteConfigSettings(minimumFetchIntervalInSeconds: 0). У овом режиму сваки позив fetch ће учитавати актуелне вредности са сервера. Важно је не заборавити да вратите продукциони интервал пре издавања, иначе ће се апликација при сваком покретању повезивати са сервером, повећавајући трошкове и потрошњу батерије.
Remote Config параметар је именована променљива која може узети једну од неколико вредности у зависности од услова. Типови вредности: string, number (double), boolean, JSON object (серијализовани низ). JSON параметри су згодни за пренос структурираних података без креирања више одвојених параметара: на пример, објекат са подешавањима теме апликације (primaryColor, backgroundColor, fontSize).
Услови (conditions) су логичка правила која проверавају атрибуте корисника или уређаја: верзију ОС-а (iOS, Android), верзију апликације, државу, језик, корисничку публику (својство дефинисано у коду), случајни проценат (за A/B тестове). Услови се могу комбиновати кроз логичко И: на пример, „верзија апликације >= 5.0” И „држава = Русија”. Сваки параметар може имати неограничен број услова, али се у пракси користи 2–5.
За персонализацију користите корисничка својства (user properties) — атрибуте постављене у коду апликације преко Firebase Analytics-а. На пример, analytics.setUserProperty(„subscription_tier”, „premium”). Remote Config може проверавати ово својство и враћати вредности специфичне за премијум кориснике. Персонализација преко Remote Config-а не захтева креирање услова на клијентској страни — цела логика је концентрисана у облачној конзоли.
| Тип услова | Пример | Сценарио |
|---|---|---|
| Верзија ОС-а | iOS >= 16.0 | Укључити нову функцију само за нове верзије iOS-а |
| Верзија апликације | app_version >= 3.2 | Приказати банер ажурирања за старе верзије |
| Држава | country == „JP” | Локализовати садржај за Јапан |
| Случајни проценат | 10% корисника | A/B тест за 10% публике |
| User Property | tier == „premium” | Укључити премијум функције |
Remote Config подржава два модела сегментације: на основу атрибута (conditions) и на основу својстава Firebase Analytics-а (user properties). Први модел је статички: услов проверава фиксни атрибут који се не мења у оквиру сесије или верзије апликације. Други модел је динамички: својство може бити постављено у било ком тренутку рада апликације, што омогућава флексибилну сегментацију корисника у рантајму.
Важно: за коришћење user properties у Remote Config-у неопходна је интеграција Firebase Analytics-а. Овај захтев је последица тога што Remote Config добија корисничке податке од Analytics SDK-а. Без Analytics-а, Remote Config ради само са атрибутима уређаја (верзија ОС-а, верзија апликације, држава из IP-а). Персонализација заснована на понашању корисника (нпр. „обавио 5 куповина”) доступна је само преко Analytics-а.
Remote Config шаблон (template) је комплетан скуп свих параметара, услова и њихових вредности. Firebase чува историју измена шаблона и омогућава повратак на било коју претходну верзију у року од 90 дана. Верзионисање је критично важно: ако се након објављивања измена открије грешка (нпр. нетачна вредност параметра ломи UI), може се одмах вратити шаблон на претходну радну верзију преко Firebase конзоле.
Свака измена шаблона (објављивање) креира нову верзију са јединственим бројем. У Firebase конзоли је доступан дневник измена са наведеним временом, корисником и описом (ако је попуњен). Препоручује се увек додавати опис објављивању: „Укључили смо нови феед за iOS 10% тестне групе”. Без описа, после месец дана немогуће је сетити се шта је тачно измењено у верзији 42.
Имплементација Remote Config-а се састоји од три корака: иницијализација SDK-а са подешавањима (време кеширања), дефинисање подразумеваних параметара (вредности у случају недоступности сервера) и логика примене примљених вредности. Подразумевани параметри су осигурач у случају да уређај не може да се повеже са Firebase-ом (нема интернета, сервер недоступан). Без default values апликација ће користити null, што може довести до crash-а.
Дефинисање default values се врши на два начина: програмски преко позива setDefaultsAsync или преко XML датотеке. Програмски начин је згодан за мале пројекте: све вредности се постављају директно у коду једном при покретању апликације. Фајловски начин је пожељнији за пројекте са десетинама параметара: вредности се чувају у ресурсима и лако се уређују без рекомпајлирања. Препоручује се комбиновање: основна подешавања у XML-у, а специфична — програмски.
Асинхроност — кључна карактеристика Remote Config SDK-а. Метод fetchAndActivate() извршава захтев ка серверу у позадинској нити, не блокирајући UI. Након завршетка учитавања долази до активације — вредности параметара се ажурирају у меморији апликације. За праћење завршетка користите слушаоце или корутине (у Android/Kotlin-у). Корисник не треба да види „tрзање” UI-ја при ажурирању параметара — све промене треба да се примењују глатко.
При првом покретању Remote Config SDK не блокира иницијализацију апликације. Док траје синхронизација, апликација користи подразумеване вредности. То значи да корисник може видети стару верзију интерфејса при првом покретању, а након завршетка fetch-а — нову. За критичне параметре (нпр. serverUrl од кога зависи функционисање), користите синхрону активацију са чекањем резултата.
Препоручена пракса: прикажите екран учитавања са минималним кашњењем, ако је апликацији критично да добије актуелне параметре пре приказивања првог екрана. На екрану учитавања покреће се fetchAndActivate са тајм-аутом од 5 секунди. Ако се за 5 секунди параметри не учитају, апликација стартује са default values. Ово спречава бесконачно чекање у одсуству интернета.
JSON параметри Remote Config-а омогућавају пренос структурираних података једном вредношћу. На пример, објекат са стиловима теме: {„primaryColor”: „#6200EE”, „borderRadius”: 8, „fontFamily”: „Roboto”}. На клијенту се JSON парсира и примењује на UI. Предности: један параметар уместо три, атомичност ажурирања (сва три поља се ажурирају истовремено), чиста конзола. Недостатак: тешкоћа читања у Firebase конзоли (JSON се приказује као низ).
Препорука: користите JSON параметре за групе логички повезаних вредности које се ажурирају заједно (теме, конфигурација екрана, мрежна подешавања). За независне параметре (feature toggle, serverUrl) користите одвојене стринг или boolean параметре — лакше се читају у конзоли и лакше је пратити промене у историји верзија шаблона.
A/B тестирање — уграђена могућност Firebase Remote Config-а, која омогућава поделу корисника у групе, постављање за сваку групу различитих вредности параметара и мерење утицаја промена на изабране метрике. За разлику од ручне поделе преко услова са random_percent, интеграција са Firebase Analytics-ом аутоматски прикупља статистику за сваку експерименталну групу и показује статистичку значајност разлика.
Процес A/B теста: програмер креира експеримент у Firebase конзоли (A/B Testing секција), бира Remote Config параметар, поставља вредности за контролну и тестну групу и одређује циљну метрику (нпр. conversion rate или revenue). Firebase аутоматски распоређује кориснике по групама, прикупља податке и након 2–4 недеље показује резултат са p-value. Експеримент се може зауставити пре времена ако је резултат јасан.
Статистичка значајност — кључни критеријум за заустављање експеримента. Firebase A/B Testing користи Frequentist приступ и показује p-value за сваку метрику. Стандардни праг значајности је 0.05 (95% вероватноћа поузданости). При достизању овог прага у корист једне од група, Firebase препоручује заустављање експеримента и примену промена за све кориснике. Ако након 4 недеље значајност није достигнута, експеримент се сматра неубедљивим.
Firebase A/B Testing подржава две врсте експеримената: класични A/B (поређење две вредности једног параметра) и вишеваријантни A/B/n (поређење три или више вредности). За вишеваријантне тестове потребно је више корисника за постизање статистичке значајности. Препоручује се коришћење A/B/n само за параметре са 3–5 варијанти, где се свака варијанта коренито разликује од осталих.
Трајање експеримента зависи од обима саобраћаја: за апликације са 1000 активних корисника дневно минимално трајање је 2 недеље, за апликације са 100.000 корисника — 3–5 дана. Firebase аутоматски израчунава потребно време и упозорава ако тренутни саобраћај није довољан за детектовање значајних разлика. Важно: не заустављајте експеримент пре израчунатог рока, чак и ако се чини да је резултат очигледан — ово је класична грешка „peeking”.
Циљне метрике у Firebase A/B Testing-у се дефинишу на основу догађаја Firebase Analytics-а. Доступне су стандардне метрике: daily active users, revenue, conversion rate, retention, user engagement. Може се креирати и прилагођена метрика на основу било ког Analytics догађаја са додатним параметрима. На пример, метрика „Проценат корисника који су стигли до екрана плаћања” креира се од догађаја screen_view са параметром screen_name = „payment”.
Препоручује се избор једне примарне метрике (primary metric) на основу које се доноси одлука о успешности експеримента и 2–3 секундарне метрике за додатну анализу. Избор више примарних метрика повећава ризик од лажно позитивног резултата (multiple comparison problem). Ако изабрана примарна метрика не показује статистички значајно побољшање, експеримент се сматра неуспешним, чак и ако су се секундарне метрике побољшале.
Размотрићемо интеграцију Remote Config-а у Android апликацију на Kotlin-у. Примери укључују иницијализацију SDK-а са прилагођеним временом кеширања, добијање параметара различитих типова, имплементацију A/B услова на клијентској страни и обраду грешака при недоступности сервера. Цео код се извршава у main activity или Application класи, како би параметри били доступни од самог старта апликације.
Пре употребе додајте зависност: implementation(„com.google.firebase:firebase-config”) преко Firebase BOM-а. Уверите се да је Firebase Analytics такође повезан, јер Remote Config користи Analytics за пренос корисничких својстава.
Први пример — основно подешавање Remote Config-а са минималним интервалом fetch-а од 1 сат за продукцију. SDK се иницијализује у методи onCreate Application класе. Након fetchAndActivate проверава се вредност параметра welcome_message, који може бити измењен даљински за екран добродошлице.
class MainApp : Application() {
override fun onCreate() {
super.onCreate()
val remoteConfig = Firebase.remoteConfig
val settings = FirebaseRemoteConfigSettings.Builder()
.setMinimumFetchIntervalInSeconds(3600)
.build()
remoteConfig.setConfigSettingsAsync(settings)
remoteConfig.setDefaultsAsync(
R.xml.remote_config_defaults
)
remoteConfig.fetchAndActivate()
.addOnCompleteListener { task ->
if (task.isSuccessful) {
val welcomeMsg = remoteConfig
.getString("welcome_message")
Log.d("RemoteConfig", welcomeMsg)
}
}
}
}
У примеру setDefaultsAsync учитава default values из XML датотеке res/xml/remote_config_defaults.xml. Ако fetch заврши greškom (нема мреже, сервер недоступан), апликација ће користити ове вредности. XML датотека садржи иста имена параметара као у Firebase конзоли: <entry key=„welcome_message”>Добродошли!</entry>. Препоручује се увек имати default values за све Remote Config параметре.
Други пример — feature toggle (застава укључивања функције). Параметар new_checkout_enabled има boolean тип. Ако је вредност true — апликација приказује нови екран завршетка поруџбине, ако је false — стари. Feature toggle је најпопуларнији сценарио Remote Config-а: промена утиче само на један параметар, не захтева модификацију логике и може бити одмах поништена.
fun isFeatureEnabled(paramName: String): Boolean {
return Firebase.remoteConfig
.getBoolean(paramName)
}
// Коришћење у activity
if (isFeatureEnabled("new_checkout_enabled")) {
navigateToNewCheckout()
} else {
navigateToLegacyCheckout()
}
Функција isFeatureEnabled инкапсулира приступ Remote Config-у и може се лако тестирати преко mock-а. За feature toggles препоручује се коришћење конвенције именовања: префикс feature_, ff_ или flag_, како би у Firebase конзоли одмах било јасно чему параметар служи. Пример: feature_new_onboarding, ff_dark_mode, flag_v3_api. Немојте користити параметре-заставе за укључивање/искључивање дуже од 3 месеца — гомилање мртвих застава отежава одржавање.
Трећи пример — добијање JSON параметра са подешавањима теме апликације. Параметар app_theme садржи JSON објекат са primaryColor, borderRadius и fontFamily. На клијенту се JSON парсира помоћу Gson-а или kotlinx.serialization-а, и вредности се примењују на UI. Овај приступ омогућава дизајнерима да мењају тему апликације без учешћа програмера и без издавања нове верзије.
data class AppTheme(
val primaryColor: String = "#6200EE",
val borderRadius: Int = 8,
val fontFamily: String = "Roboto"
)
fun getAppTheme(): AppTheme {
val json = Firebase.remoteConfig
.getString("app_theme")
return Gson().fromJson(json, AppTheme::class.java)
}
Рад са JSON-ом захтева пажњу: ако JSON у Firebase конзоли буде неисправан (нпр. недостаје зарез), парсирање ће завршити грешком и апликација ће добити default values уместо актуелне теме. Препоручује се валидација JSON низова пре објављивања преко JSON валидатора. За продукцију додајте try-catch при парсирању и логујте greške преко Firebase Crashlytics-а.
Firebase Remote Config је моћан алат, али при неправилној употреби може довести до проблема са перформансама, предвидљивошћу понашања и безбедношћу. Размотрићемо кључне праксе које ће помоћи у избегавању типичних грешака при раду са сервисом и ограничења која треба узети у обзир при пројектовању архитектуре апликације.
Избегавајте осетљиве податке — Remote Config није намењен за чување тајни (API кључева, токена, лозинки). Све вредности параметара су доступне клијентском коду и могу се извући из меморије апликације. За поверљиве податке користите Cloud Functions са серверском провером или Secret Manager. У Remote Config-у чувајте само јавне параметре: текстове, заставе, подешавања UI-ја, URL-ове јавних ендпоинта.
Тестирајте сваку промену пре објављивања за целокупну публику. Користите A/B тест или објављивање на мали проценат (1–5% корисника) да проверите да нова вредност не изазива crash и не ломи приказ. Remote Config нема staging окружење — све промене се објављују директно у продукцију. Једини сигуран начин објављивања је постепено увођење.
Ограничења платформе: максималан број параметара — 2000 (за све типове), максимална величина једне вредности — 256 KB, укупна величина одговора сервера — 800 KB. Број корисничких својстава (user properties) која се могу користити у Remote Config-у ограничен је на 25. Минимални интервал fetch-а — 0 секунди (за отклањање grešaka), али злоупотреба може довести до прекорачења квоте Cloud Functions-а (30.000 захтева у минути по пројекту).
Често постављана питања
Да, у одсуству мреже Remote Config користи подразумеване вредности постављене у коду или XML датотеци. Након успостављања везе, SDK ће аутоматски извршити fetch при следећем позиву или по истеку интервала кеширања. Апликација никада неће пасти због недостатка Remote Config-а, ако су default values исправно постављене.
Подразумевано — до 12 сати (интервал кеширања). За убрзање користите FCM push обавештење преко дугмета „Publish changes” у конзоли: апликација прима поруку и одмах извршава fetch. Минимални интервал fetch-а за убрзање може се подесити преко minimumFetchIntervalInSeconds.
Бесплатно — до 2000 параметара по пројекту, неограничен број захтева на Spark тарифу. Ограничење од 2000 параметара је меко: Firebase не блокира креирање нових, али перформансе могу опасти. За пројекте са хиљадама параметара препоручује се коришћење структурираних JSON параметара.
Да, Firebase Remote Config има званични Flutter додатак: firebase_remote_config. API у потпуности одговара изворним Android и iOS SDK-овима. Додатак подржава све типове параметара, fetchAndActivate, слушаоце промена и интеграцију са Firebase Analytics-ом за A/B тестирање.
Firebase Feature Flags је посебан сервис за управљање функцијама са подршком за циљне публике и експерименте. Remote Config је општији сервис за било које параметре, укључујући feature toggles. Feature Flags пружају наменски UI и интеграцију са Cloud Run-ом, али Remote Config остаје основни алат за већину сценарија.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође