LaunchDarkly to platforma zarządzania flagami funkcji, która pozwala programistom aplikacji mobilnych włączać i wyłączać możliwości bez ponownego wdrażania. Według danych LaunchDarkly, 2024, ponad 4000 firm korzysta z usługi do bezpiecznego uruchamiania nowych funkcji, testów A/B i stopniowego wdrażania w czasie rzeczywistym.
Najważniejsze
LaunchDarkly to platforma zarządzania flagami funkcji, założona w 2014 roku przez firmę Catamorphic Corp. Głównym zadaniem usługi jest umożliwienie zespołom programistycznym włączania, wyłączania i konfigurowania funkcji aplikacji w czasie rzeczywistym bez wdrażania nowego kodu.
W przeciwieństwie do tradycyjnego podejścia, gdzie wydanie nowej funkcjonalności wymaga publikacji wersji w sklepie z aplikacjami, LaunchDarkly pozwala na zdalną zmianę zachowania. Dla programowania mobilnego jest to szczególnie ważne — recenzja w App Store i Google Play zajmuje od kilku godzin do kilku dni, a flagę można przełączyć w sekundy.
Architektura LaunchDarkly opiera się na trzech komponentach: serwer flag, SDK klienckie i panel zarządzania. Serwer przechowuje konfiguracje flag, reguły włączania i segmenty użytkowników. SDK utrzymuje stałe połączenie SSE z serwerem w celu otrzymywania aktualizacji w czasie rzeczywistym.
Po zmianie flagi w panelu serwer wysyła aktualizację do wszystkich podłączonych SDK. Opóźnienie wynosi 200–500 milisekund. W przypadku utraty połączenia SDK używa ostatniej zapisanej w pamięci podręcznej wartości do przywrócenia kanału. Gwarantuje to, że aplikacja nadal działa z ustawieniami aktualnymi w momencie przerwania połączenia.
Panel zarządzania LaunchDarkly zapewnia interfejs wizualny do tworzenia i zarządzania flagami. Panel pokazuje bieżący stan każdej flagi, historię zmian z audytem, kto i kiedy zmieniał konfigurację, a także metryki użycia. Dla każdego środowiska można skonfigurować oddzielne reguły — flaga w staging może być włączona w 100%, a w production — w 5%.
Feature flag to nazwany przełącznik z regułami i celami. Flagi mogą być boolean, multivariate i JSON. Rules określają warunki włączenia: na przykład „włącz dla 10% użytkowników Androida 12 z Niemiec“. Segments grupują użytkowników według wersji OS, regionu, modelu urządzenia i dowolnych atrybutów.
Każda flaga ma środowiska: development, staging i production. Pozwala to testować nową funkcję w izolowanym środowisku, zanim zostanie włączona dla rzeczywistych użytkowników. Reguły środowisk są konfigurowane niezależnie — flaga może być włączona w staging i wyłączona w production.
LaunchDarkly udostępnia natywne SDK dla Android, iOS, React Native i Flutter. Każde SDK wymaga minimalnej konfiguracji: klucz SDK i identyfikator użytkownika. Biblioteka automatycznie zarządza połączeniem, buforowaniem i obsługą błędów.
Do podłączenia tworzy się instancję LDClient w Application.onCreate. Klient przyjmuje konfigurację z kluczem mobilnym i kontekstem użytkownika. Po inicjalizacji aplikacja wywołuje wariację flagi w dowolnym miejscu kodu metodą 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)
}
}
Po inicjalizacji sprawdzenie flagi wykonuje się jedną metodą. BoolVariation zwraca wartość zgodną z regułami flagi. Wartość domyślna jest używana, jeśli SDK nie udało się pobrać konfiguracji. Metoda boolVariationDetail dodatkowo zwraca powód, dla którego flaga przyjęła daną wartość.
val ldClient = LDClient.get()
val showNewFeature = ldClient.boolVariation(
"new-checkout-flow",
false
)
if (showNewFeature) {
showNewCheckoutScreen()
} else {
showLegacyCheckoutScreen()
}
Testy A/B w LaunchDarkly są realizowane przez flagi multivariate. Każdemu wariantowi przypisuje się procent ruchu — na przykład 50% użytkowników widzi stary ekran (wariant A), a 50% — nowy (wariant B). Platforma zapamiętuje użytkownika, gwarantując, że zawsze trafia do tej samej grupy.
Stopniowe wdrażanie zwiększa procent użytkowników mających dostęp do funkcji stopniowo. Typowy harmonogram: 1% — pierwszy dzień, 5% — drugi, 25% — trzeci, 100% — po tygodniu. W przypadku wykrycia błędu flaga jest natychmiast wyłączana dla wszystkich. LaunchDarkly integruje się z Amplitude, Mixpanel i Google Analytics do śledzenia metryk każdej wariacji.
Platforma udostępnia wbudowany system eksperymentów, który automatycznie oblicza istotność statystyczną różnic między wariantami. Dostępne metryki: konwersja, retention, liczba sesji, błędy i zdarzenia niestandardowe. Wyniki są wyświetlane w panelu z wizualizacją przedziałów ufności. Eksperymenty można uruchamiać zarówno na ruchu produkcyjnym, jak i na wydzielonych segmentach użytkowników.
Integracja LaunchDarkly z platformami analitycznymi to kolejna zaleta. Dane o flagach są automatycznie wysyłane do Amplitude, Mixpanel, Google Analytics lub własnego potoku danych przez Data Export API. Pozwala to tworzyć raporty o wpływie każdej funkcji na kluczowe metryki aplikacji. LaunchDarkly obsługuje również webhooki do powiadamiania systemów zewnętrznych o zmianie stanu flag.
Rozważmy pełny cykl: dodanie zależności, inicjalizacja i sprawdzenie flagi dla telemetrii awarii. Funkcja powinna być aktywna tylko dla testerów, ale nie dla rzeczywistych użytkowników. LaunchDarkly SDK dla Android jest dostępny przez Maven Central. Wersja 5.x obsługuje Kotlin Coroutines i Jetpack Compose do reaktywnego otrzymywania aktualizacji flag.
Dla aplikacji iOS LaunchDarkly udostępnia wsparcie Swift Package Manager i CocoaPods. Swift SDK używa async/await do asynchronicznej inicjalizacji i Combine framework do subskrypcji zmian. Oba SDK (Android i iOS) obsługują synchronizację w tle i buforowanie w lokalnym magazynie do pracy w trybie offline.
// app/build.gradle
dependencies {
implementation "com.launchdarkly:launchdarkly-android-sdk:5.2.0"
}
W klasie CrashReporter sprawdzamy flagę crash-reporting-enabled. Jeśli flaga jest włączona dla bieżącego użytkownika — uruchamiamy wysyłanie raportów awarii. SDK automatycznie otrzyma nowy stan przy zmianie na serwerze, ale do inicjalizacji wystarczy jednorazowe sprawdzenie.
class CrashReporter {
fun init() {
val client = LDClient.get()
if (client.boolVariation("crash-reporting-enabled", false)) {
Crashlytics.start()
}
}
}
Udane scenariusze: zarządzanie przepływem płatności z natychmiastowym wyłączeniem w przypadku awii dostawcy, stopniowe wdrażanie zmian UI z monitorowaniem metryk, personalizacja treści według segmentów. Według oficjalnego bloga LaunchDarkly, zespoły skracają czas odzyskiwania po błędach z godzin do minut.
Anty-wzorce: używanie flag do stałej logiki warunkowej (flagi tymczasowe), przechowywanie sekretów w atrybutach flag, tworzenie nakładających się reguł. Zalecenie: usuwaj flagę z kodu po zakończeniu wdrażania — zapobiega to długowi technicznemu i komplikacji bazy kodu. Kolejnym częstym błędem jest używanie flag jako długowiecznych przełączników, które nigdy nie są usuwane z kodu po stabilizacji funkcji.
Prawidłowa strategia zarządzania flagami obejmuje plan usunięcia dla każdej nowej flagi. LaunchDarkly udostępnia wbudowane narzędzia do wykrywania nieużywanych flag — flaga jest uznawana za nieużywaną, jeśli SDK nie sprawdzało jej wartości przez ponad 30 dni. Takie flagi są oznaczane w panelu i można je bezpiecznie usunąć z kodu.
Dla małych projektów z jednym zespołem LaunchDarkly może być nadmiarowy — wystarczy proste conditional w kodzie lub Firebase Remote Config. Wybierz platformę, gdy wymagana jest złożona segmentacja, audyt zmian, eksperymenty A/B lub wielozespołowe zarządzanie flagami. Dla startupów i projektów MVP LaunchDarkly oferuje darmowy plan Starter z ograniczeniem liczby flag i MAU.
Zgodność LaunchDarkly z istniejącymi narzędziami to ważny kryterium wyboru. Platforma integruje się z Jira, Slack, PagerDuty, Datadog i innymi usługami przez webhooki i API. Zespoły już używające tych narzędzi otrzymują bezproblemową integrację bez dodatkowej infrastruktury do monitorowania i powiadomień przy zmianie stanu flag. LaunchDarkly obsługuje również dostawcę Terraform do zarządzania flagami jako kodem (Flags as Code) — pozwala to przechowywać konfigurację flag w Git i przechodzić code review przed zastosowaniem.
Często zadawane pytania
LaunchDarkly oferuje taryfę Freemium z ograniczeniem liczby flag i MAU. Plany komercyjne dla zespołów zaczynają się od 150 USD miesięcznie, obejmując nieograniczone flagi, audyt zmian i integrację z Jira i Slack.
Platforma obsługuje ponad 40 SDK, w tym natywne Android (Kotlin/Java), iOS (Swift/Objective-C), React Native i Flutter. Wszystkie mobilne SDK działają przez Streaming API z buforowaniem w lokalnym magazynie.
Tak, LaunchDarkly ma wbudowany system eksperymentów z flagami multivariate, dystrybucją ruchu i automatycznym obliczaniem istotności statystycznej. Obsługiwana jest integracja z Amplitude, Mixpanel i Google Analytics.
W przypadku utraty połączenia SDK używa buforowanych wartości flag z lokalnego magazynu. Po przywróceniu połączenia SDK synchronizuje się z serwerem i stosuje bieżące stany flag.
LaunchDarkly udostępnia testy A/B, flagi multi-wariantowe, złożoną segmentację, audyt zmian i SDK dla języków serwerowych. Firebase Remote Config jest prostszy i darmowy, ale nie obsługuje eksperymentów wielowariantowych i szczegółowego audytu.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również