LaunchDarkly — це платформа керування прапорцями функцій, яка дозволяє розробникам мобільних додатків вмикати та вимикати можливості без повторного деплою. За даними LaunchDarkly, 2024, понад 4000 компаній використовують сервіс для безпечного запуску нових функцій, A/B тестування та поступового rollout у реальному часі.
Головне
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 key та ідентифікатор користувача. Бібліотека автоматично керує підключенням, кешуванням та обробкою помилок.
Для підключення створюється екземпляр LDClient в Application.onCreate. Клієнт приймає конфігурацію з mobile key та контекстом користувача. Після ініціалізації додаток викликає варіацію прапорця в будь-якому місці коду методом 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). Платформа фіксує користувача, гарантуючи, що він завжди потрапляє в ту саму групу.
Поетапний rollout збільшує відсоток користувачів з доступом до функції поступово. Типовий графік: 1% — перший день, 5% — другий, 25% — третій, 100% — через тиждень. При виявленні помилки прапорець вимикається миттєво для всіх. LaunchDarkly інтегрується з Amplitude, Mixpanel та Google Analytics для відстеження метрик кожної варіації.
Платформа надає вбудовану систему експериментів, яка автоматично обчислює статистичну значущість відмінностей між варіантами. Доступні метрики: конверсія, retention, кількість сесій, помилки та користувацькі події. Результати відображаються в дашборді з візуалізацією confidence intervals. Експерименти можна запускати як на production-трафіку, так і на виділених сегментах користувачів.
Інтеграція LaunchDarkly з аналітичними платформами — ще одна перевага. Дані про прапорці автоматично надсилаються в Amplitude, Mixpanel, Google Analytics або власний data 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()
}
}
}
Успішні сценарії: керування платіжним флоу з миттєвим вимкненням при збоях провайдера, поетапний rollout UI-змін з моніторингом метрик, персоналізація контенту за сегментами. За даними офіційного блогу LaunchDarkly, команди скорочують час відновлення після помилок з годин до хвилин.
Анти-патерни: використання прапорців для постійної умовної логіки (прапорці тимчасові), зберігання секретів в атрибутах прапорців, створення правил, що перекриваються. Рекомендація: видаляйте прапорець з коду після завершення rollout — це запобігає технічному боргу та ускладненню кодової бази. Ще одна поширена помилка — використання прапорців для довгоживучих перемикачів, які ніколи не видаляються з коду після стабілізації функції.
Правильна стратегія керування прапорцями включає план видалення для кожного нового прапорця. 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також