Configuración de Dark Launches con Firebase Remote Config
Clase 5 de 17 • Curso de Android: Despliegue a Google Play Store
Resumen
La implementación de estrategias de lanzamiento controlado es fundamental para garantizar una experiencia de usuario fluida durante las actualizaciones de aplicaciones móviles. Mediante técnicas como los dark launches y feature flags, los desarrolladores pueden desplegar nuevas funcionalidades de manera segura y controlada, asegurando que todos los usuarios reciban las actualizaciones simultáneamente, independientemente de sus configuraciones de actualización automática.
¿Cómo implementar dark launches con Firebase Remote Config?
Los dark launches o lanzamientos oscuros son una estrategia que permite introducir nuevas funcionalidades de forma oculta, activándolas remotamente cuando sea necesario. Esta técnica es especialmente útil cuando queremos asegurarnos de que todos los usuarios reciban una actualización al mismo tiempo, incluso aquellos que no tienen configuradas las actualizaciones automáticas en sus dispositivos.
Para implementar esta estrategia, utilizaremos Firebase Remote Config, una herramienta que nos permite controlar remotamente el comportamiento de nuestra aplicación. Veamos paso a paso cómo configurarlo:
- Acceder a la consola de Firebase y dirigirse a la sección de Remote Config en la pestaña de ejecución.
- Crear una nueva configuración con un nombre descriptivo (por ejemplo, "isActive").
- Seleccionar el tipo de dato (en este caso, booleano).
- Añadir una descripción opcional (como "para cuando se lance la nueva actualización").
- Establecer un valor por defecto.
- Guardar y publicar los cambios para que estén disponibles en producción.
Configuración del ViewModel para Remote Config
Una vez configurado el parámetro en Firebase, necesitamos implementar la lógica en nuestra aplicación para controlar esta funcionalidad. Siguiendo una arquitectura MVVM, crearemos un ViewModel dedicado:
class MainViewModel(private val context: Context, private val application: Application) {
companion object {
private val ACTIVE_KEY = "isActive"
}
private val remoteConfig: FirebaseRemoteConfig = FirebaseRemoteConfig.getInstance()
private val _isActive = MutableStateFlow(true)
val isActive: StateFlow<Boolean> get() = _isActive
private fun setupConfigRemote() {
val configSettings = RemoteConfigSettings.Builder()
.setMinimumFetchIntervalInSeconds(3600)
.build()
remoteConfig.setConfigSettingsAsync(configSettings)
remoteConfig.setDefaultsAsync(mapOf(ACTIVE_KEY to false))
}
private fun fetchAndActivate() {
viewModelScope.launch {
remoteConfig.fetchAndActivate()
.addOnCompleteListener { task ->
if (task.isSuccessful) {
_isActive.value = remoteConfig.getBoolean(ACTIVE_KEY)
} else {
Toast.makeText(context, "Falló", Toast.LENGTH_SHORT).show()
}
}
}
}
}
En este código:
- Creamos una constante
ACTIVE_KEY
que coincide con el nombre del parámetro en Firebase. - Inicializamos la instancia de
FirebaseRemoteConfig
. - Configuramos un
StateFlow
para mantener el estado de la funcionalidad. - Implementamos métodos para configurar y obtener los valores remotos.
El intervalo mínimo de actualización (3600 segundos) determina cuándo la aplicación volverá a solicitar valores actualizados de Firebase.
Integración con la interfaz de usuario
Para utilizar esta configuración en nuestra UI, necesitamos conectar el ViewModel con nuestra vista:
// En MainActivity
val mainViewModel = MainViewModel(applicationContext, application)
// En la composable function
@Composable
fun FoodTrackScreen(mainViewModel: MainViewModel) {
val isActive by mainViewModel.isActive.collectAsState(initial = true)
Column {
// Contenido regular de la app
// Mostrar nueva funcionalidad solo si está activa
if (isActive) {
Card {
// Contenido de la nueva funcionalidad
Text("¡Nueva sección habilitada!")
}
}
}
}
Con esta implementación, podemos controlar remotamente la visibilidad de nuevas funcionalidades sin necesidad de lanzar actualizaciones de la aplicación. Cuando decidamos activar la funcionalidad para todos los usuarios, simplemente cambiamos el valor en Firebase Remote Config.
¿Qué son los feature flags y cómo se diferencian de los dark launches?
Los feature flags son una estrategia similar a los dark launches, pero con un enfoque ligeramente diferente. Mientras que los dark launches se centran en lanzar actualizaciones de manera controlada y simultánea, los feature flags están diseñados para encender y apagar funcionalidades específicas de nuestra aplicación según sea necesario.
Esta técnica nos permite:
- Realizar pruebas A/B con diferentes grupos de usuarios
- Desactivar rápidamente funcionalidades problemáticas sin necesidad de lanzar una actualización
- Implementar lanzamientos graduales para monitorear el impacto de nuevas características
- Personalizar la experiencia para diferentes segmentos de usuarios
La implementación técnica es similar a la de los dark launches, utilizando Firebase Remote Config u otras herramientas similares, pero con un enfoque más granular en el control de funcionalidades individuales.
Los desarrolladores de aplicaciones móviles pueden aprovechar estas estrategias para minimizar riesgos durante los lanzamientos y garantizar una experiencia de usuario consistente y de alta calidad. Tanto los dark launches como los feature flags son herramientas esenciales en el arsenal de cualquier equipo de desarrollo que busque implementar prácticas modernas de entrega continua.
¿Has implementado alguna vez estas estrategias en tus aplicaciones? Comparte tu experiencia en los comentarios y cuéntanos qué otras técnicas utilizas para controlar tus lanzamientos.