Este producto no es compatible con el sitio Datadog seleccionado. ().
Descripción general
Esta página describe cómo instrumentar aplicaciones Dart y Flutter con el SDK de Feature Flags de Datadog. Los Feature Flags de Datadog proporcionan una forma unificada de controlar de forma remota la disponibilidad de funciones en su aplicación y experimentar de forma segura.
El SDK de Feature Flags de Datadog para Dart es un paquete nativo de Dart. Obtiene asignaciones precalculadas de Datadog, evalúa localmente los valores tipados de los Feature Flags, e informa la telemetría de evaluación de los Feature Flags a Datadog. Las aplicaciones Flutter pueden usar el paquete Dart independiente directamente o instalar datadog_flags_flutter para derivar la configuración de datadog_flutter_plugin y agregar evaluaciones exitosas a RUM.
Este paquete proporciona una API compatible con OpenFeature para Dart y Flutter, pero no está construido sobre el SDK de OpenFeature para Dart. Utilice las API de esta página directamente. Datadog está desarrollando una integración basada en proveedores de OpenFeature para Dart y Flutter.
Instalación
Para una aplicación Flutter que ya utiliza el SDK de Flutter de Datadog, instale datadog_flags_flutter:
flutter pub add datadog_flags_flutter
datadog_flags_flutter depende de datadog_flutter_plugin 3.4.0 o posterior.
Para uso independiente en Dart, instale datadog_flags:
Utilice esta configuración cuando su aplicación Flutter ya inicialice datadog_flutter_plugin. Agregue DatadogFlagsPluginConfiguration a su DatadogConfiguration existente antes de inicializar el SDK de Datadog. El plugin deriva el token de cliente, el entorno, el sitio, el servicio, la versión y el ID de la aplicación RUM de la configuración del SDK de Flutter. Para crear un token de cliente, consulte Client tokens.
Los Flutter Feature Flags no son compatibles con el sitio de Datadog seleccionado ().
Después de la inicialización, recupere un cliente de Feature Flags del plugin e inicialícelo con el contexto de evaluación para el sujeto actual:
finalflags=DatadogSdk.instance.flags;if(flags==null){return;}finalflagsClient=flags.sharedClient();try{awaitflagsClient.initialize(constFlagsEvaluationContext(targetingKey:'user-123',attributes:{'companyId':'company-456','plan':'enterprise',},),);}onFlagsInitializationTimeoutException{// Continue startup with stored assignments or evaluation defaults.
}
Las evaluaciones exitosas se envían a través de la canalización de telemetría de Datadog Feature Flags. Con la configuración integrada de Flutter, las evaluaciones exitosas que devuelven una variante también se agregan al visualizar RUM activo como evaluaciones de Feature Flags.
Configuración independiente de Dart
Utilice esta configuración cuando no esté utilizando datadog_flutter_plugin, o cuando desee gestionar los Feature Flags independientemente de la inicialización del SDK de Flutter.
Habilite Datadog Feature Flags temprano en el inicio de su aplicación. Para la configuración en vivo de los Feature Flags, se requieren clientToken, env y site. Para crear un token de cliente, consulte Client tokens.
Los Dart and Flutter Feature Flags no son compatibles con el sitio de Datadog seleccionado ().
Los clientes son locales al aislamiento de Dart donde se crean. Los aislamientos en segundo plano no comparten el estado de DatadogFlags ni las cachés de asignación con el aislamiento principal. Si un aislamiento en segundo plano necesita evaluar Feature Flags, llame a DatadogFlags.instance.enable(), cree los clientes que necesite e inicialícelos de forma independiente.
Establezca el contexto de evaluación
Defina a quién o a qué se aplica la evaluación del Feature Flag mediante FlagsEvaluationContext. El contexto de evaluación incluye información del usuario, la organización, la sesión o el dispositivo utilizada para determinar qué variaciones de los Feature Flags deben devolverse. Llame a initialize() antes de evaluar los Feature Flags para que el cliente pueda obtener las asignaciones para el contexto.
Datadog Feature Flags requiere que los atributos del contexto de evaluación sean valores primitivos planos: cadenas, números y booleanos. No pase objetos o arreglos anidados; no son compatibles y pueden causar que los datos de exposición se descarten.
El targetingKey es el sujeto de aleatorización para los despliegues porcentuales. Los usuarios con la misma clave de segmentación siempre reciben la misma variante para un Feature Flag dado.
targetingKey es opcional. Si inicializa un contexto antes de que se conozca un ID de usuario u organización, el SDK envía una cadena vacía para la solicitud de asignación de precomputación.
Utilice clientes con nombre independientes para sujetos de evaluación separados, como usuarios que han cerrado sesión y usuarios que han iniciado sesión, o segmentación a nivel de organización y a nivel de usuario:
Después de inicializar un cliente, puede leer los valores de los Feature Flags en toda su aplicación. La evaluación de Feature Flags es local e instantánea porque el SDK utiliza datos de asignación almacenados en caché localmente. No se produce ninguna solicitud de red durante una evaluación tipada.
Cada método de evaluación requiere un valor predeterminado proporcionado por el llamador. Los métodos de evaluación no generan errores por la preparación del proveedor, por la ausencia de Feature Flags o discrepancias de tipo. Devuelven un valor FlagDetails<T> con el valor evaluado, los metadatos de asignación y un error programático cuando el SDK devuelve el valor predeterminado.
Marcadores booleanos
Utilice getBooleanDetails() para Feature Flags que representen condiciones de encendido/apagado o verdadero/falso:
FlagDetails.error se establece cuando el SDK devuelve el valor predeterminado porque el proveedor no está listo, el Feature Flag no se encuentra o el valor de asignación no coincide con el método de evaluación tipado. Los detalles exitosos incluyen el valor evaluado más los metadatos de asignación, como variant y reason, cuando Datadog los devolvió.
Configuración avanzada
DatadogFlagsConfiguration controla el comportamiento del SDK:
Cuando true (predeterminado), el SDK registra eventos de exposición para evaluaciones exitosas cuyas asignaciones están marcadas para registro. Establezca en false para deshabilitar el seguimiento de exposición.
trackEvaluations
Cuando true (predeterminado), el SDK registra la telemetría de evaluación de Feature Flags agregada. Establezca en false para deshabilitar el seguimiento de evaluación.
initializationTimeout
Tiempo máximo de espera para que el primer contexto de evaluación esté listo. El tiempo de espera utiliza un presupuesto de reloj de pared para la operación de inicialización completa. Cubre la carga de asignaciones almacenadas, la codificación de la solicitud, la obtención de asignaciones, la lectura del cuerpo de la respuesta, la decodificación de JSON, la publicación de asignaciones y el almacenamiento de asignaciones. No cambia el tiempo de espera del cliente HTTP.
El tiempo de espera se aplica solo a la primera llamada initialize() para cada cliente. La primera llamada consume el tiempo de espera incluso si la operación falla o es reemplazada. Las llamadas posteriores no tienen temporizador de inicialización. El valor predeterminado es 5 segundos. Establezca el valor en null, cero o una duración negativa para desactivar el tiempo de espera.
Cuando el tiempo de espera expira, initialize() lanza FlagsInitializationTimeoutException. La operación de asignación continúa y puede publicar un resultado exitoso tardío. Las asignaciones almacenadas coincidentes permanecen disponibles. Las evaluaciones sin asignaciones devuelven el valor predeterminado proporcionado por el llamador con FlagEvaluationError.providerNotReady.
Dart ejecuta el temporizador de tiempo de espera en el mismo aislado que el trabajo de inicialización sincrónica. Por lo tanto, el trabajo sincrónico puede hacer que la espera observada sea más larga que el tiempo de espera configurado.
initializationTimeout está disponible en datadog_flags y datadog_flags_flutter 1.1.0 y versiones posteriores.
evaluationFlushInterval
El intervalo en el que se envía la telemetría de evaluación de Feature Flags agregada a Datadog. Los valores aceptados están entre 1 y 60 segundos. El valor predeterminado es 10 segundos.
store
Almacenamiento opcional de la última asignación conocida. El SDK puede usar asignaciones almacenadas coincidentes mientras una solicitud de red nueva está en curso o no está disponible.
httpClient, customFlagsEndpoint, customExposureEndpoint, y customEvaluationEndpoint
Anulaciones avanzadas para pruebas, proxies o enrutamiento personalizado.
Si se llama a enable() sin un datadogConfig, el SDK no crea un proveedor activo. Las evaluaciones devuelven el valor predeterminado proporcionado por el llamador con FlagEvaluationError.providerNotReady.
Para una configuración integrada con Flutter, pase estas opciones a través de DatadogFlagsPluginConfiguration:
Cuando true (predeterminado), las evaluaciones exitosas que devuelven una variante se agregan al visualizar RUM activo como evaluaciones de Feature Flags. Si su aplicación no utiliza RUM, esta opción no tiene efecto.
Almacenamiento de la última asignación conocida
El SDK mantiene las asignaciones en memoria después de que initialize() tenga éxito. Para restaurar las últimas asignaciones conocidas entre instancias del SDK, proporcione un DatadogFlagsStore:
classMyFlagsStoreimplementsDatadogFlagsStore{@overrideFuture<FlagsData?>read(StringclientName)async{// Read and decode persisted FlagsData for this client name.
returnnull;}@overrideFuture<void>write(StringclientName,FlagsDatadata)async{// Encode and persist successful assignments for this client name.
}@overrideFuture<void>delete(StringclientName)async{// Delete persisted assignments for this client name.
}}
Las asignaciones almacenadas se utilizan solo cuando su contexto de evaluación coincide con el contexto activo. Una obtención exitosa en vivo siempre mueve al cliente al estado de asignación más reciente y escribe ese estado de nuevo en el almacenamiento.
El paquete Dart no elige una ubicación en disco ni incluye un almacenamiento en disco específico para Flutter. Las aplicaciones de Flutter pueden implementar DatadogFlagsStore con su mecanismo de almacenamiento de aplicaciones preferido.
Apagado
Llame a shutdown() cuando ya no necesite un cliente. Esto vacía las cargas pendientes de exposición y evaluación de flags antes de borrar las asignaciones en memoria del cliente.
awaitflagsClient.shutdown();
Llame a DatadogFlags.instance.disable() cuando la aplicación esté cerrando el SDK de flags:
awaitDatadogFlags.instance.disable();
Ejemplo completo
El siguiente ejemplo habilita el SDK, inicializa un cliente con un contexto de evaluación y evalúa un flag booleano:
import'package:datadog_flags/datadog_flags.dart';Future<void>initializeFlags()async{finaldatadogFlags=DatadogFlags.instance;awaitdatadogFlags.enable(configuration:DatadogFlagsConfiguration(initializationTimeout:constDuration(seconds:2),datadogConfig:constDatadogFlagsConfig(clientToken:'<CLIENT_TOKEN>',env:'<ENV_NAME>',site:DatadogFlagsSite.<codeclass="js-region-param region-param"data-region-param="dd_datacenter_lowercase"></code>,applicationId:'<RUM_APPLICATION_ID>',service:'<SERVICE_NAME>',version:'<APP_VERSION>',),),);finalflagsClient=datadogFlags.sharedClient();try{awaitflagsClient.initialize(constFlagsEvaluationContext(targetingKey:'user-123',attributes:{'companyId':'company-456','plan':'enterprise',},),);}onFlagsInitializationTimeoutException{// Continue startup with stored assignments or evaluation defaults.
}finaldetails=flagsClient.getBooleanDetails(key:'checkout.enabled',defaultValue:false,);if(details.error==null&&details.value){showNewCheckoutFlow();}}
Pruebas
Puede realizar pruebas en un entorno de prueba dedicado de Datadog con el DatadogFlagsClient real, o aislar el código de la aplicación detrás de una interfaz pequeña y sustituir una implementación falsa en las pruebas unitarias. Esta sección muestra el enfoque simulado, que mantiene las pruebas autocontenidas y sin conexión.