LaunchDarkly, mobil uygulama geliştiricilerinin yeniden dağıtım yapmadan özellikleri etkinleştirip devre dışı bırakmasına olanak tanıyan bir özellik bayrağı yönetim platformudur. LaunchDarkly, 2024'e göre, 4.000'den fazla şirket güvenli özellik lansmanları, A/B testi ve gerçek zamanlı aşamalı dağıtım için hizmeti kullanmaktadır.
Önemli Noktalar
LaunchDarkly, 2014 yılında Catamorphic Corp. tarafından kurulmuş bir özellik bayrağı yönetim platformudur. Hizmetin temel amacı, geliştirme ekiplerine yeni kod dağıtmadan uygulama özelliklerini gerçek zamanlı olarak etkinleştirme, devre dışı bırakma ve yapılandırma yeteneği vermektir.
Yeni bir işlevselliğin yayınlanmasının uygulama mağazasında bir sürüm yayınlamayı gerektirdiği geleneksel yaklaşımın aksine, LaunchDarkly davranışı uzaktan değiştirmeye olanak tanır. Mobil geliştirme için bu özellikle önemlidir — App Store ve Google Play incelemesi birkaç saatten bir güne kadar sürerken, bir bayrak saniyeler içinde değiştirilebilir.
LaunchDarkly mimarisi üç bileşenden oluşur: bayrak sunucusu, istemci SDK'ları ve kontrol paneli. Sunucu, bayrak yapılandırmalarını, hedefleme kurallarını ve kullanıcı segmentlerini depolar. SDK, gerçek zamanlı güncellemeler almak için sunucuyla kalıcı bir SSE bağlantısı sağlar.
Kontrol panelinde bir bayrak değiştirildiğinde, sunucu bağlı tüm SDK'lara bir güncelleme gönderir. Gecikme 200–500 milisaniyedir. Bağlantı kesildiğinde, SDK kanal yeniden kurulana kadar son önbelleğe alınmış durumu kullanır. Bu, uygulamanın bağlantı kesilmesi sırasında mevcut olan en son ayarlarla çalışmaya devam etmesini sağlar.
LaunchDarkly kontrol paneli, bayraklar oluşturmak ve yönetmek için görsel bir arayüz sağlar. Kontrol paneli her bayrağın mevcut durumunu, yapılandırmayı kimin ve ne zaman değiştirdiğine dair denetim geçmişini ve kullanım metriklerini gösterir. Her ortam için ayrı kurallar yapılandırılabilir — bir bayrak staging'de %100, üretimde %5 etkin olabilir.
Feature flag, kuralları ve hedefleri olan adlandırılmış bir anahtardır. Bayraklar boolean, çok değişkenli ve JSON türlerinde olabilir. Rules etkinleştirme koşullarını tanımlar: örneğin, “Almanya'daki Android 12 kullanıcılarının %10'u için etkinleştir.” Segments, kullanıcıları işletim sistemi sürümü, bölge, cihaz modeli ve özel niteliklere göre gruplandırır.
Her bayrağın ortamları vardır: geliştirme, staging ve üretim. Bu, yeni bir özelliği gerçek kullanıcılar için etkinleştirmeden önce izole bir ortamda test etmeye olanak tanır. Ortam kuralları bağımsız olarak yapılandırılır — bir bayrak staging'de etkin ve üretimde devre dışı olabilir.
LaunchDarkly, Android, iOS, React Native ve Flutter için yerel SDK'lar sağlar. Her SDK minimum kurulum gerektirir: bir SDK anahtarı ve kullanıcı tanımlayıcısı. Kütüphane, bağlantıları, önbelleğe almayı ve hata yönetimini otomatik olarak yönetir.
Bağlanmak için Application.onCreate'da bir LDClient örneği oluşturun. İstemci, bir mobil anahtar ve kullanıcı bağlamı içeren bir yapılandırmayı kabul eder. Başlatmadan sonra uygulama, boolVariation yöntemiyle kodun herhangi bir yerinde bir bayrak varyasyonunu çağırır.
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)
}
}
Başlatmadan sonra, bir bayrağın kontrolü tek bir yöntemle yapılır. BoolVariation bayrak kurallarına göre değeri döndürür. SDK yapılandırmayı alamazsa varsayılan değer kullanılır. boolVariationDetail yöntemi ayrıca bayrağın bu değeri neden aldığının nedenini döndürür.
val ldClient = LDClient.get()
val showNewFeature = ldClient.boolVariation(
"new-checkout-flow",
false
)
if (showNewFeature) {
showNewCheckoutScreen()
} else {
showLegacyCheckoutScreen()
}
LaunchDarkly'de A/B testi çok değişkenli bayraklar aracılığıyla uygulanır. Her varyanta bir trafik yüzdesi atanır — örneğin, kullanıcıların %50'si eski ekranı (varyant A) ve %50'si yeni ekranı (varyant B) görür. Platform, kullanıcıyı sabitleyerek her zaman aynı gruba düşmesini sağlar.
Aşamalı dağıtım, bir özelliğe erişimi olan kullanıcıların yüzdesini kademeli olarak artırır. Tipik bir program: %1 — ilk gün, %5 — ikinci, %25 — üçüncü, %100 — bir hafta sonra. Bir hata tespit edilirse, bayrak herkes için anında devre dışı bırakılır. LaunchDarkly, her varyasyonun metriklerini izlemek için Amplitude, Mixpanel ve Google Analytics ile entegre olur.
Platform, varyantlar arasındaki farkların istatistiksel anlamlılığını otomatik olarak hesaplayan yerleşik bir deney sistemi sağlar. Mevcut metrikler: dönüşüm, tutma, oturum sayısı, hatalar ve özel etkinlikler. Sonuçlar, güven aralığı görselleştirmeleriyle kontrol panelinde görüntülenir. Deneyler hem üretim trafiğinde hem de özel kullanıcı segmentlerinde çalıştırılabilir.
Analiz platformlarıyla entegrasyon LaunchDarkly'nin bir başka avantajıdır. Bayrak verileri otomatik olarak Amplitude, Mixpanel, Google Analytics veya Data Export API aracılığıyla özel bir veri hattına gönderilir. Bu, her özelliğin uygulamanın temel metrikleri üzerindeki etkisine ilişkin raporlar oluşturmayı sağlar. LaunchDarkly ayrıca bayrak durumu değişiklikleri hakkında harici sistemleri bilgilendirmek için webhook'ları da destekler.
Tam döngüyü inceleyelim: bağımlılığı ekleme, başlatma ve çökme telemetrisi için bir bayrağı kontrol etme. Özellik yalnızca test uzmanları için etkin olmalı, gerçek kullanıcılar için değil. Android için LaunchDarkly SDK, Maven Central aracılığıyla kullanılabilir. Sürüm 5.x, bayrak güncellemelerinin reaktif alımı için Kotlin Coroutines ve Jetpack Compose'u destekler.
iOS uygulamaları için LaunchDarkly, Swift Package Manager ve CocoaPods desteği sağlar. Swift SDK, eşzamansız başlatma için async/await ve değişikliklere abone olmak için Combine framework'ünü kullanır. Her iki SDK (Android ve iOS), çevrimdışı çalışma için arka planda senkronizasyonu ve yerel depolamada önbelleğe almayı destekler.
// app/build.gradle
dependencies {
implementation "com.launchdarkly:launchdarkly-android-sdk:5.2.0"
}
CrashReporter sınıfında crash-reporting-enabled bayrağını kontrol ederiz. Bayrak geçerli kullanıcı için etkinse, çökme raporları göndermeye başlarız. Sunucuda durum değiştiğinde SDK otomatik olarak yeni durumu alacaktır, ancak başlatma için tek bir kontrol yeterlidir.
class CrashReporter {
fun init() {
val client = LDClient.get()
if (client.boolVariation("crash-reporting-enabled", false)) {
Crashlytics.start()
}
}
}
Başarılı senaryolar: sağlayıcı arızalarında anında devre dışı bırakma ile ödeme akışı yönetimi, metrik izleme ile UI değişikliklerinin aşamalı dağıtımı, segmentlere göre içerik kişiselleştirme. LaunchDarkly'nin resmi bloguna göre, ekipler hata kurtarma süresini saatlerden dakikalara indiriyor.
Anti-kalıplar: kalıcı koşullu mantık için bayrak kullanma (bayraklar geçicidir), bayrak niteliklerinde sırlar saklama, örtüşen kurallar oluşturma. Öneri: dağıtım tamamlandıktan sonra bayrağı koddan kaldırın — bu, teknik borç ve kod tabanı karmaşıklığını önler. Diğer bir yaygın hata, özellik stabilize olduktan sonra koddan asla kaldırılmayan uzun ömürlü anahtarlar için bayrak kullanmaktır.
Doğru bir bayrak yönetim stratejisi, her yeni bayrak için bir kaldırma planı içerir. LaunchDarkly kullanılmayan bayrakları tespit etmek için yerleşik araçlar sağlar — SDK, bayrağın değerini 30 günden uzun süre kontrol etmemişse bayrak kullanılmamış sayılır. Bu tür bayraklar kontrol panelinde işaretlenir ve koddan güvenle kaldırılabilir.
Tek ekipli küçük projeler için LaunchDarkly aşırı olabilir — kodda basit bir koşullu ifade veya Firebase Remote Config yeterlidir. Platformu seçin karmaşık segmentasyon, değişiklik denetimi, A/B deneyleri veya çok ekipli bayrak yönetimi gerektiğinde. Startup'lar ve MVP projeleri için LaunchDarkly, bayrak sayısı ve MAU sınırlamaları olan ücretsiz bir Starter planı sunar.
LaunchDarkly'nin mevcut araçlarla uyumluluğu önemli bir seçim kriteridir. Platform Jira, Slack, PagerDuty, Datadog ve diğer hizmetlerle webhook'lar ve API'ler aracılığıyla entegre olur. Bu araçları zaten kullanan ekipler, bayrak durumu değişikliklerinde izleme ve uyarılar için ek altyapı olmadan sorunsuz entegrasyon elde eder. LaunchDarkly ayrıca bayrakları kod olarak yönetmek (Flags as Code) için bir Terraform sağlayıcısını da destekler — bu, bayrak yapılandırmasını Git'te saklamaya ve uygulamadan önce kod incelemesinden geçirmeye olanak tanır.
Sıkça sorulan sorular
LaunchDarkly, bayrak sayısı ve MAU sınırlamaları olan bir Freemium planı sunar. Ekipler için ticari planlar aylık 150$'dan başlar ve sınırsız bayrak, değişiklik denetimi ve Jira ile Slack entegrasyonunu içerir.
Platform, yerel Android (Kotlin/Java), iOS (Swift/Objective-C), React Native ve Flutter dahil olmak üzere 40'tan fazla SDK'yı destekler. Tüm mobil SDK'lar, yerel depolamada önbellekleme ile Streaming API üzerinden çalışır.
Evet, LaunchDarkly, çok değişkenli bayraklar, trafik dağıtımı ve otomatik istatistiksel anlamlılık hesaplaması ile yerleşik bir deney sistemine sahiptir. Amplitude, Mixpanel ve Google Analytics ile entegrasyon desteklenir.
Bağlantı kesildiğinde, SDK yerel depolamadan önbelleğe alınmış bayrak değerlerini kullanır. Bağlantı yeniden kurulduktan sonra SDK sunucuyla senkronize olur ve geçerli bayrak durumlarını uygular.
LaunchDarkly A/B testi, çok değişkenli bayraklar, gelişmiş segmentasyon, değişiklik denetimi ve sunucu tarafı dilleri için SDK'lar sağlar. Firebase Remote Config daha basit ve ücretsizdir, ancak çok değişkenli deneyleri veya ayrıntılı denetimi desteklemez.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun