LaunchDarkly је платформа за управљање функционалним заставицама која омогућава програмерима мобилних апликација да укључују и искључују могућности без поновног постављања. Према подацима LaunchDarkly, 2024, више од 4000 компанија користи услугу за безбедно покретање нових функција, A/B тестирање и постепено увођење у реалном времену.
Главне тачке
LaunchDarkly је платформа за управљање функционалним заставицама, основана 2014. године од стране компаније Catamorphic Corp. Главни задатак услуге је да омогући развојним тимовима да укључују, искључују и конфигуришу функције апликације у реалном времену без постављања новог кода.
За разлику од традиционалног приступа, где објављивање нове функционалности захтева објаву верзије у продавници апликација, LaunchDarkly омогућава даљинску промену понашања. За мобилни развој ово је посебно важно — преглед у App Store и Google Play траје од неколико сати до неколико дана, а заставица се може пребацити за секунде.
Архитектура LaunchDarkly се заснива на три компоненте: сервер заставица, клијентски SDK-ови и контролна табла. Сервер чува конфигурације заставица, правила укључивања и сегменте корисника. SDK одржава сталну SSE везу са сервером за примање ажурирања у реалном времену.
Када се заставица промени на табли, сервер шаље ажурирање свим повезаним SDK-овима. Кашњење износи 200–500 милисекунди. При губитку везе, SDK користи последње кеширано стање до обнављања канала. Ово гарантује да апликација наставља да ради са подешавањима ажурним у тренутку прекида.
Контролна табла LaunchDarkly пружа визуелни интерфејс за креирање и управљање заставицама. Табла приказује тренутно стање сваке заставице, историју промена са аудитом ко је и када мењао конфигурацију, као и метрике коришћења. За свако окружење могу се конфигурисати одвојена правила — заставица на staging може бити укључена 100%, а на production — 5%.
Feature flag је именовани прекидач са правилима и циљевима. Заставице могу бити boolean, multivariate и JSON. Rules дефинишу услове укључивања: на пример, „укључи за 10% корисника Android 12 из Немачке“. Segments групишу кориснике према верзији ОС, региону, моделу уређаја и произвољним атрибутима.
Свака заставица има окружења: development, staging и production. Ово омогућава тестирање нове функције у изолованом окружењу пре него што се укључи за стварне кориснике. Правила окружења се конфигуришу независно — заставица може бити укључена на staging и искључена на production.
LaunchDarkly пружа изворне SDK-ове за Android, iOS, React Native и Flutter. Сваки SDK захтева минималну конфигурацију: SDK кључ и идентификатор корисника. Библиотека аутоматски управља везом, кеширањем и обрадом грешака.
За повезивање се креира инстанца LDClient у Application.onCreate. Клијент прихвата конфигурацију са мобилним кључем и контекстом корисника. Након иницијализације, апликација позива варијацију заставице на било ком месту кода методом boolVariation.
class MyApplication : Application() {
private lateinit var ldClient: LDClient
override fun onCreate() {
super.onCreate()
val config = LDConfig.Builder("mobile-key-abc123")
.build()
val user = LDUser.Builder("user-unique-id")
.build()
ldClient = LDClient.init(this, config, user)
}
}
Након иницијализације, провера заставице се врши једном методом. BoolVariation враћа вредност према правилима заставице. Подразумевана вредност се користи ако SDK није успео да преузме конфигурацију. Метода boolVariationDetail додатно враћа разлог због којег је заставица прихватила дату вредност.
val ldClient = LDClient.get()
val showNewFeature = ldClient.boolVariation(
"new-checkout-flow",
false
)
if (showNewFeature) {
showNewCheckoutScreen()
} else {
showLegacyCheckoutScreen()
}
A/B тестирање у LaunchDarkly се реализује кроз multivariate заставице. Свакој варијанти се додељује проценат саобраћаја — на пример, 50% корисника види стари екран (варијанта A) и 50% — нови (варијанта B). Платформа бележи корисника, гарантујући да увек пада у исту групу.
Постепено увођење повећава проценат корисника са приступом функцији постепено. Типичан распоред: 1% — први дан, 5% — други, 25% — трећи, 100% — после недељу дана. При откривању грешке, заставица се тренутно искључује за све. LaunchDarkly се интегрише са Amplitude, Mixpanel и Google Analytics за праћење метрика сваке варијације.
Платформа пружа уграђени систем експеримената који аутоматски израчунава статистичку значајност разлика између варијанти. Доступне метрике: конверзија, задржавање, број сесија, грешке и прилагођени догађаји. Резултати се приказују на табли са визуелизацијом интервала поузданости. Експерименти се могу покретати како на production саобраћају, тако и на издвојеним сегментима корисника.
Интеграција LaunchDarkly са аналитичким платформама је још једна предност. Подаци о заставицама се аутоматски шаљу у Amplitude, Mixpanel, Google Analytics или сопствени pipeline података преко Data Export API. Ово омогућава креирање извештаја о утицају сваке функције на кључне метрике апликације. LaunchDarkly такође подржава webhooks за обавештавање спољних система о промени стања заставица.
Размотримо пуни циклус: додавање зависности, иницијализација и провера заставице за телеметрију падова. Функција треба да буде активна само за тестере, а не за стварне кориснике. LaunchDarkly SDK за Android је доступан преко Maven Central. Верзија 5.x подржава Kotlin Coroutines и Jetpack Compose за реактивно примање ажурирања заставица.
За iOS апликације, LaunchDarkly пружа подршку за Swift Package Manager и CocoaPods. Swift SDK користи async/await за асинхрону иницијализацију и Combine framework за претплату на промене. Оба SDK (Android и iOS) подржавају позадинску синхронизацију и кеширање у локалном складишту за рад у офлајн режиму.
// app/build.gradle
dependencies {
implementation "com.launchdarkly:launchdarkly-android-sdk:5.2.0"
}
У класи CrashReporter проверавамо заставицу crash-reporting-enabled. Ако је заставица укључена за тренутног корисника — покрећемо слање извештаја о падовима. SDK ће аутоматски добити ново стање при промени на серверу, али за иницијализацију је довољна једнократна провера.
class CrashReporter {
fun init() {
val client = LDClient.get()
if (client.boolVariation("crash-reporting-enabled", false)) {
Crashlytics.start()
}
}
}
Успешни сценарији: управљање током плаћања са тренутним искључивањем при кваровима провајдера, постепено увођење UI промена са праћењем метрика, персонализација садржаја по сегментима. Према званичном блогу LaunchDarkly, тимови смањују време опоравка од грешака са сати на минуте.
Анти-обрасци: коришћење заставица за сталну условну логику (заставице су привремене), чување тајни у атрибутима заставица, креирање преклапајућих правила. Препорука: уклоните заставицу из кода након завршетка увођења — ово спречава технички дуг и компликовање базе кода. Још једна честа грешка је коришћење заставица као дуготрајних прекидача који се никада не уклањају из кода након стабилизације функције.
Правилна стратегија управљања заставицама укључује план уклањања за сваку нову заставицу. LaunchDarkly пружа уграђене алате за откривање некоришћених заставица — заставица се сматра некоришћеном ако SDK није проверавао њену вредност више од 30 дана. Такве заставице се означавају на табли и могу се безбедно уклонити из кода.
За мале пројекте са једним тимом, LaunchDarkly може бити преобиман — довољан је једноставан conditional у коду или Firebase Remote Config. Изаберите платформу када је потребна сложена сегментација, аудит промена, A/B експерименти или управљање заставицама од стране више тимова. За стартапове и MVP пројекте, LaunchDarkly нуди бесплатни Starter план са ограниченим бројем заставица и MAU.
Компатибилност LaunchDarkly са постојећим алатима је важан критеријум избора. Платформа се интегрише са Jira, Slack, PagerDuty, Datadog и другим услугама преко webhooks и API. Тимови који већ користе ове алате добијају беспрекорну интеграцију без додатне инфраструктуре за праћење и обавештења при промени стања заставица. LaunchDarkly такође подржава Terraform провајдер за управљање заставицама као кодом (Flags as Code) — ово омогућава чување конфигурације заставица у Git-у и пролазак кроз code review пре примене.
Често постављана питања
LaunchDarkly нуди Freemium тарифу са ограниченим бројем заставица и MAU. Комерцијални планови за тимове почињу од 150 УСД месечно, укључујући неограничене заставице, аудит промена и интеграцију са Jira и Slack.
Платформа подржава више од 40 SDK-ова, укључујући изворне Android (Kotlin/Java), iOS (Swift/Objective-C), React Native и Flutter. Сви мобилни SDK-ови раде преко Streaming API са кеширањем у локалном складишту.
Да, LaunchDarkly има уграђени систем експеримената са multivariate заставицама, расподелом саобраћаја и аутоматским израчунавањем статистичке значајности. Подржана је интеграција са Amplitude, Mixpanel и Google Analytics.
При губитку везе, SDK користи кеширане вредности заставица из локалног складишта. Након обнављања везе, SDK се синхронизује са сервером и примењује тренутна стања заставица.
LaunchDarkly пружа A/B тестирање, мулти-варијантне заставице, сложену сегментацију, аудит промена и SDK за серверске језике. Firebase Remote Config је једноставнији и бесплатан, али не подржава вишеваријантне експерименте и детаљан аудит.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође