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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също