LaunchDarkly é uma plataforma de gerenciamento de flags de funcionalidades que permite aos desenvolvedores de aplicativos móveis ativar e desativar recursos sem reimplantação. De acordo com LaunchDarkly, 2024, mais de 4.000 empresas usam o serviço para lançamentos seguros de recursos, testes A/B e rollout gradual em tempo real.
Principais pontos
LaunchDarkly é uma plataforma de gerenciamento de flags de funcionalidades fundada em 2014 pela Catamorphic Corp. O principal objetivo do serviço é dar às equipes de desenvolvimento a capacidade de ativar, desativar e configurar recursos do aplicativo em tempo real sem implantar novo código.
Ao contrário da abordagem tradicional, onde o lançamento de uma nova funcionalidade exige a publicação de uma versão na loja de aplicativos, o LaunchDarkly permite alterar o comportamento remotamente. Para o desenvolvimento mobile, isso é especialmente importante — a revisão na App Store e no Google Play leva de várias horas a um dia, enquanto uma flag pode ser alternada em segundos.
A arquitetura do LaunchDarkly é composta por três componentes: o servidor de flags, os SDKs cliente e o painel de controle. O servidor armazena as configurações das flags, as regras de segmentação e os segmentos de usuários. O SDK mantém uma conexão SSE persistente com o servidor para receber atualizações em tempo real.
Quando uma flag é alterada no painel, o servidor envia uma atualização para todos os SDKs conectados. A latência é de 200 a 500 milissegundos. Quando a conexão é perdida, o SDK usa o último estado em cache até que o canal seja restaurado. Isso garante que o aplicativo continue funcionando com as configurações mais recentes disponíveis no momento da desconexão.
O painel de controle do LaunchDarkly fornece uma interface visual para criar e gerenciar flags. O painel mostra o estado atual de cada flag, o histórico de alterações com auditoria de quem modificou a configuração e quando, bem como métricas de uso. Regras separadas podem ser configuradas para cada ambiente — uma flag pode estar 100% ativada em staging e 5% em produção.
Feature flag é um interruptor nomeado com regras e alvos. As flags podem ser booleanas, multivariadas e JSON. As regras definem condições de ativação: por exemplo, “ativar para 10% dos usuários Android 12 da Alemanha.” Os segmentos agrupam usuários por versão do SO, região, modelo de dispositivo e atributos personalizados.
Cada flag tem ambientes: desenvolvimento, staging e produção. Isso permite testar um novo recurso em um ambiente isolado antes de ativá-lo para usuários reais. As regras de ambiente são configuradas independentemente — uma flag pode estar ativada em staging e desativada em produção.
O LaunchDarkly fornece SDKs nativos para Android, iOS, React Native e Flutter. Cada SDK requer configuração mínima: uma chave de SDK e um identificador de usuário. A biblioteca gerencia automaticamente conexões, cache e tratamento de erros.
Para conectar, crie uma instância do LDClient em Application.onCreate. O cliente aceita uma configuração com uma chave móvel e o contexto do usuário. Após a inicialização, o aplicativo chama uma variação de flag em qualquer lugar do código usando o método 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)
}
}
Após a inicialização, a verificação de uma flag é feita com um único método. BoolVariation retorna o valor de acordo com as regras da flag. O valor padrão é usado se o SDK não conseguir obter a configuração. O método boolVariationDetail retorna adicionalmente o motivo pelo qual a flag assumiu aquele valor.
val ldClient = LDClient.get()
val showNewFeature = ldClient.boolVariation(
"new-checkout-flow",
false
)
if (showNewFeature) {
showNewCheckoutScreen()
} else {
showLegacyCheckoutScreen()
}
O teste A/B no LaunchDarkly é implementado por meio de flags multivariadas. Cada variante recebe uma porcentagem de tráfego — por exemplo, 50% dos usuários veem a tela antiga (variante A) e 50% veem a nova (variante B). A plataforma fixa o usuário, garantindo que ele sempre caia no mesmo grupo.
O rollout gradual aumenta incrementalmente a porcentagem de usuários com acesso a um recurso. Um cronograma típico: 1% — primeiro dia, 5% — segundo, 25% — terceiro, 100% — após uma semana. Se um erro for detectado, a flag é desativada instantaneamente para todos. O LaunchDarkly se integra com Amplitude, Mixpanel e Google Analytics para rastrear métricas de cada variação.
A plataforma fornece um sistema de experimentos integrado que calcula automaticamente a significância estatística das diferenças entre as variantes. Métricas disponíveis: conversão, retenção, número de sessões, erros e eventos personalizados. Os resultados são exibidos no painel com visualização de intervalos de confiança. Os experimentos podem ser executados tanto no tráfego de produção quanto em segmentos de usuários dedicados.
A integração do LaunchDarkly com plataformas de análise é outra vantagem. Os dados das flags são enviados automaticamente para Amplitude, Mixpanel, Google Analytics ou um pipeline de dados personalizado por meio da API Data Export. Isso permite criar relatórios sobre o impacto de cada recurso nas métricas principais do aplicativo. O LaunchDarkly também oferece suporte a webhooks para notificar sistemas externos sobre alterações no estado das flags.
Vamos percorrer o ciclo completo: adicionar a dependência, inicializar e verificar uma flag para telemetria de falhas. O recurso deve estar ativo apenas para testadores, não para usuários reais. O SDK do LaunchDarkly para Android está disponível via Maven Central. A versão 5.x suporta Kotlin Coroutines e Jetpack Compose para recebimento reativo de atualizações de flags.
Para aplicativos iOS, o LaunchDarkly oferece suporte a Swift Package Manager e CocoaPods. O SDK Swift usa async/await para inicialização assíncrona e o framework Combine para assinar alterações. Ambos os SDKs (Android e iOS) suportam sincronização em segundo plano e cache em armazenamento local para operação offline.
// app/build.gradle
dependencies {
implementation "com.launchdarkly:launchdarkly-android-sdk:5.2.0"
}
Na classe CrashReporter, verificamos a flag crash-reporting-enabled. Se a flag estiver ativada para o usuário atual, começamos a enviar relatórios de falhas. O SDK receberá automaticamente o novo estado quando ele mudar no servidor, mas uma única verificação é suficiente para a inicialização.
class CrashReporter {
fun init() {
val client = LDClient.get()
if (client.boolVariation("crash-reporting-enabled", false)) {
Crashlytics.start()
}
}
}
Cenários bem-sucedidos: gerenciamento de fluxo de pagamento com desativação instantânea em falhas do provedor, rollout gradual de alterações de UI com monitoramento de métricas, personalização de conteúdo por segmentos. De acordo com o blog oficial do LaunchDarkly, as equipes reduzem o tempo de recuperação de erros de horas para minutos.
Antipadrões: usar flags para lógica condicional permanente (flags são temporárias), armazenar segredos em atributos de flags, criar regras sobrepostas. Recomendação: remova a flag do código após a conclusão do rollout — isso evita dívida técnica e complexidade na base de código. Outro erro comum é usar flags como interruptores de longa duração que nunca são removidos do código após a estabilização do recurso.
Uma estratégia adequada de gerenciamento de flags inclui um plano de remoção para cada nova flag. O LaunchDarkly fornece ferramentas integradas para detectar flags não utilizadas — uma flag é considerada não utilizada se o SDK não verificou seu valor por mais de 30 dias. Essas flags são marcadas no painel e podem ser removidas do código com segurança.
Para projetos pequenos com uma única equipe, o LaunchDarkly pode ser excessivo — um simples condicional no código ou Firebase Remote Config é suficiente. Escolha a plataforma quando precisar de segmentação complexa, auditoria de alterações, experimentos A/B ou gerenciamento de flags em várias equipes. Para startups e projetos MVP, o LaunchDarkly oferece um plano Starter gratuito com limites no número de flags e MAU.
A compatibilidade do LaunchDarkly com ferramentas existentes é um critério de seleção importante. A plataforma se integra com Jira, Slack, PagerDuty, Datadog e outros serviços por meio de webhooks e APIs. As equipes que já usam essas ferramentas obtêm integração perfeita sem infraestrutura adicional para monitoramento e alertas sobre alterações no estado das flags. O LaunchDarkly também oferece suporte a um provedor Terraform para gerenciar flags como código (Flags as Code) — isso permite armazenar a configuração das flags no Git e passar por revisão de código antes da aplicação.
Perguntas frequentes
O LaunchDarkly oferece um plano Freemium com limites no número de flags e MAU. Os planos comerciais para equipes começam em US$ 150 por mês, incluindo flags ilimitadas, auditoria de alterações e integração com Jira e Slack.
A plataforma suporta mais de 40 SDKs, incluindo Android nativo (Kotlin/Java), iOS (Swift/Objective-C), React Native e Flutter. Todos os SDKs móveis funcionam por meio da Streaming API com cache em armazenamento local.
Sim, o LaunchDarkly possui um sistema de experimentos integrado com flags multivariadas, distribuição de tráfego e cálculo automático de significância estatística. A integração com Amplitude, Mixpanel e Google Analytics é suportada.
Quando a conexão é perdida, o SDK usa valores de flags em cache do armazenamento local. Após restaurar a conexão, o SDK sincroniza com o servidor e aplica os estados atuais das flags.
O LaunchDarkly fornece testes A/B, flags multivariadas, segmentação avançada, auditoria de alterações e SDKs para linguagens de servidor. O Firebase Remote Config é mais simples e gratuito, mas não suporta experimentos multivariados ou auditoria detalhada.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também