LaunchDarkly:什么是功能标志及其工作原理

作者: IT Sectr 发布日期: 2026-04-13 阅读时间: 8 分钟

LaunchDarkly 是一个功能标志管理平台,允许移动应用开发者无需重新部署即可启用和禁用功能。根据 LaunchDarkly,2024 的数据,超过 4000 家公司使用该服务安全地推出新功能、进行 A/B 测试和实时逐步部署。

要点

  • LaunchDarkly——用于安全部署和测试新功能的功能标志管理平台
  • Feature flag——无需更改应用代码即可管理功能可用性的开关
  • SDK通过 SSE 连接与服务器实时同步标志状态
  • 逐步部署为选定百分比的用户启用功能,并可立即回滚
  • A/B 测试基于多变量标志,自动在变体之间分配流量

什么是 LaunchDarkly?

LaunchDarkly 是一个功能标志管理平台,由 Catamorphic Corp 于 2014 年创立。该服务的主要任务是让开发团队能够实时启用、禁用和配置应用功能,而无需部署新代码。

与传统方法(需要发布新版本到应用商店)不同,LaunchDarkly 允许远程更改行为。对于移动开发来说,这尤其重要——App Store 和 Google Play 的审核需要几小时到几天,而标志可以在几秒钟内切换。

LaunchDarkly 平台如何工作

LaunchDarkly 的架构基于三个组件:标志服务器、客户端 SDK 和控制面板。服务器存储标志配置、启用规则和用户细分。SDK 与服务器保持永久的 SSE 连接,以实时接收更新。

当面板中的标志发生更改时,服务器会向所有连接的 SDK 发送更新。延迟为 200–500 毫秒。连接断开时,SDK 使用最后缓存的状态,直到通道恢复。这保证了应用程序在断开连接时使用最新的设置继续运行。

LaunchDarkly 控制面板提供用于创建和管理标志的可视化界面。面板显示每个标志的当前状态、谁在何时更改了配置的审计变更历史记录以及使用指标。可以为每个环境配置单独的规则——staging 中的标志可以 100% 启用,而 production 中的标志可以 5% 启用。

LaunchDarkly 的关键概念

Feature flag 是一个带有规则和目标的命名开关。标志可以是布尔型、多变量型和 JSON 型。Rules 定义启用条件:例如,“为来自德国的 10% Android 12 用户启用”。Segments 按操作系统版本、地区、设备型号和任意属性对用户进行分组。

每个标志都有环境:development、staging 和 production。这允许在隔离环境中测试新功能,然后再为实际用户启用。环境规则独立配置——标志可以在 staging 中启用,而在 production 中禁用。

SDK 及与移动应用的集成

LaunchDarkly 为 Android、iOS、React Native 和 Flutter 提供原生 SDK。每个 SDK 需要最少的配置:SDK 密钥和用户标识符。该库自动管理连接、缓存和错误处理。

Android SDK 初始化

要连接,在 Application.onCreate 中创建一个 LDClient 实例。客户端接受带有移动密钥和用户上下文的配置。初始化后,应用程序通过 boolVariation 方法在代码中的任何位置调用标志变体。

kotlin
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 方法还返回标志接受此值的原因。

kotlin
val ldClient = LDClient.get()
val showNewFeature = ldClient.boolVariation(
    "new-checkout-flow",
    false
)
if (showNewFeature) {
    showNewCheckoutScreen()
} else {
    showLegacyCheckoutScreen()
}

通过 LaunchDarkly 进行 A/B 测试和逐步部署

A/B 测试在 LaunchDarkly 中通过多变量标志实现。每个变体分配一定比例的流量——例如,50% 的用户看到旧屏幕(变体 A),50% 看到新屏幕(变体 B)。平台记录用户,确保他们始终进入同一组。

逐步部署逐渐增加有权访问该功能的用户百分比。典型时间表:1%——第一天,5%——第二天,25%——第三天,100%——一周后。检测到错误时,立即为所有人禁用该标志。LaunchDarkly 与 Amplitude、Mixpanel 和 Google Analytics 集成,以跟踪每个变体的指标。

指标和实验

该平台提供内置实验系统,可自动计算变体之间差异的统计显著性。可用指标:转化率、留存率、会话数、错误和自定义事件。结果在面板中显示,并带有置信区间的可视化。实验可以在生产流量和专门的用户细分上运行。

LaunchDarkly 与分析平台的集成是另一个优势。有关标志的数据通过 Data Export API 自动发送到 Amplitude、Mixpanel、Google Analytics 或自定义数据管道。这允许创建有关每个功能对关键应用指标影响的报告。LaunchDarkly 还支持 webhooks,用于在标志状态更改时通知外部系统。

Android 中集成 LaunchDarkly SDK 的示例

让我们来看看完整的周期:添加依赖项、初始化以及检查崩溃遥测标志。该功能应仅对测试人员激活,而不是对实际用户。适用于 Android 的 LaunchDarkly SDK 可通过 Maven Central 获取。5.x 版本支持 Kotlin Coroutines 和 Jetpack Compose,以响应式地接收标志更新。

对于 iOS 应用程序,LaunchDarkly 提供对 Swift Package Manager 和 CocoaPods 的支持。Swift SDK 使用 async/await 进行异步初始化,使用 Combine framework 订阅更改。两个 SDK(Android 和 iOS)都支持后台同步和本地存储缓存以进行离线操作。

build.gradle 中的依赖项

groovy
// app/build.gradle
dependencies {
    implementation "com.launchdarkly:launchdarkly-android-sdk:5.2.0"
}

在 CrashReporter 中检查标志

在 CrashReporter 类中,我们检查 crash-reporting-enabled 标志。如果标志已启用对于当前用户——我们开始发送崩溃报告。当服务器发生更改时,SDK 将自动获取新状态,但对于初始化,一次性检查就足够了。

kotlin
class CrashReporter {
    fun init() {
        val client = LDClient.get()
        if (client.boolVariation("crash-reporting-enabled", false)) {
            Crashlytics.start()
        }
    }
}

典型场景和反模式

成功场景:在提供商故障时立即禁用的支付流程管理、通过监控指标逐步部署 UI 更改、按细分个性化内容。根据 LaunchDarkly 官方博客,团队将错误后的恢复时间从数小时缩短到数分钟。

反模式:使用标志进行永久条件逻辑(标志是临时的)、在标志属性中存储机密、创建重叠规则。建议:部署完成后从代码中删除标志——这可以防止技术债务和代码库复杂化。另一个常见错误是将标志用作长期开关,在功能稳定后永远不会从代码中删除。

正确的标志管理策略包括每个新标志的删除计划。LaunchDarkly 提供内置工具来检测未使用的标志——如果 SDK 超过 30 天未检查其值,则该标志被视为未使用。此类标志在面板中标记,可以安全地从代码中删除。

何时放弃 LaunchDarkly

对于只有一个团队的小型项目,LaunchDarkly 可能过于复杂——代码中的简单条件语句或 Firebase Remote Config 就足够了。选择该平台当需要复杂细分、变更审计、A/B 实验或多团队标志管理时。对于初创公司和 MVP 项目,LaunchDarkly 提供免费的 Starter 计划,对标志数量和 MAU 有限制。

LaunchDarkly 与现有工具的兼容性是一个重要的选择标准。该平台与 Jira、Slack、PagerDuty、Datadog 和其他服务通过 webhooks 和 API 集成。已经使用这些工具的团队可以获得无缝集成,而无需额外的监控基础设施和在标志状态更改时发出通知。LaunchDarkly 还支持 Terraform 提供程序,将标志作为代码管理(Flags as Code)——这允许将标志配置存储在 Git 中并在应用之前进行代码审查。

常见问题

LaunchDarkly 的价格是多少?

LaunchDarkly 提供免费增值计费,对标志数量和 MAU 有限制。团队商业计划每月 150 美元起,包括无限标志、变更审计以及与 Jira 和 Slack 的集成。

LaunchDarkly 支持哪些移动 SDK?

该平台支持超过 40 种 SDK,包括原生 Android(Kotlin/Java)、iOS(Swift/Objective-C)、React Native 和 Flutter。所有移动 SDK 都通过 Streaming API 运行,并在本地存储中缓存。

LaunchDarkly 可以用于 A/B 测试吗?

是的,LaunchDarkly 拥有内置实验系统,具有多变量标志、流量分配和自动统计显著性计算。支持与 Amplitude、Mixpanel 和 Google Analytics 集成。

SDK 在没有互联网的情况下如何工作?

连接断开时,SDK 使用本地存储中缓存的标志值。连接恢复后,SDK 与服务器同步并应用标志的当前状态。

LaunchDarkly 与 Firebase Remote Config 有何不同?

LaunchDarkly 提供A/B 测试、多变量标志、复杂细分、变更审计和服务器端语言的 SDK。Firebase Remote Config 更简单且免费,但不支持多变量实验和详细审计。

总结

  • LaunchDarkly——用于在移动应用中安全推出新功能的功能标志管理平台
  • Feature flag支持布尔型、多变量型和 JSON 类型,并具有按用户细分的启用规则
  • SDK适用于 Android、iOS、React Native 和 Flutter,通过 SSE 连接实时同步标志
  • 逐步部署降低风险——检测到问题时立即禁用标志,无需回滚版本
  • A/B 测试基于多变量标志,自动分配和统计报告
  • 细分按操作系统版本、地区、设备型号和属性允许精确配置启用
  • 建议从代码中删除已使用的标志,以防止条件逻辑累积

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读