Con el SDK de Flutter de Kameleoon, puede ejecutar experimentos y activar feature flags en todas las plataformas a las que apunta el framework de aplicaciones Flutter. Integrar el SDK en las aplicaciones es sencillo y su huella (en términos de uso de memoria y red) es baja.
Primeros pasos: Para obtener ayuda para comenzar, consulte la guía del desarrollador.
Changelog: Última versión del SDK de Flutter: 3.7.0 Changelog.
Métodos del SDK: Para la documentación de referencia completa de los métodos del SDK de Flutter, consulte la sección referencia.
Guía del desarrollador
Primeros pasos
Esta guía le ayuda a integrar el SDK y a comenzar a ejecutar experimentos en aplicaciones Flutter. Este tutorial explica la configuración de una prueba A/B sencilla para cambiar el número de productos recomendados en función de distintas variaciones.
Instalar el cliente Flutter
Para instalar el cliente Flutter de Kameleoon, declare una dependencia en su archivo pubspec.yaml:
kameleoon_client_flutter: ^3.0.0
En modo release, la biblioteca JS se carga automáticamente. Sin embargo, en modo debug pueden producirse problemas (debido al compilador de desarrollo Dart) al importar la biblioteca JS. Para evitar posibles problemas, se recomienda encarecidamente importar la biblioteca JS de forma explícita.
Añada la siguiente línea de script a la sección <head> de su index.html:<script type="application/javascript" charset="utf-8" src="assets/packages/kameleoon_client_flutter/assets/kameleoonSDK.js"></script>
Inicializar el cliente Kameleoon
Tras instalar el SDK en su aplicación y configurar un experimento en el lado del servidor en la aplicación Kameleoon, el siguiente paso es crear el cliente Kameleoon.
Un KameleoonClient es un objeto singleton (por siteCode) que actúa como puente entre su aplicación y la plataforma Kameleoon. Incluye todos los métodos y propiedades que necesita para ejecutar un experimento.
import 'package:kameleoon_client_flutter/kameleoon_client_flutter.dart';
class _HomePage extends State<HomePage> {
KameleoonClient kameleoonClient
@override
void initState() {
super.initState();
try {
// pass client configuration and visitorCode as arguments
final config = KameleoonClientConfig(
refreshIntervalMinutes: 15, // 60 minutes by default, optional
defaultTimeoutMilliseconds: 10000, // 10_000 milliseconds by default, optional
dataExpirationIntervalMinutes: 1440 * 365, // infinity by default, optional
trackingIntervalMilliseconds: 500, // 1000 milliseconds by default, optional
environment: "staging", // optional
isUniqueIdentifier: false, // false by default, optional
domain: "example.com", // web only option, optional
networkDomain: "company.com", // web only option, optional
defaultDataFile: "{...}" // optional
);
final visitorCode = "yourVisitorCode";
final kameleoonClient = KameleoonClientFactory.create(siteCode, visitorCode: visitorCode, config: config);
// or, if you want, visitor code will be generated automatically
final kameleoonClient = KameleoonClientFactory.create(siteCode, config: config);
} on SiteCodeIsEmpty catch (ex) {
// Exception indicates that the provided siteCode is empty
} on VisitorCodeInvalid catch (ex) {
// Exception indicates that the provided visitorCode is invalid
} on Exception catch (ex) {
// Any other error
}
}
}
Durante su ejecución, el método KameleoonClientFactory.create() inicializa el cliente, pero este no está listo para usarse de inmediato, ya que el cliente Kameleoon debe recuperar la configuración actual de los feature flags (junto con su distribución de tráfico) desde un servidor remoto de Kameleoon. Esta recuperación requiere acceso a la red, que no siempre está disponible. Hasta que el cliente Kameleoon esté totalmente listo, no debe intentar ejecutar otros métodos del SDK de Android de Kameleoon. Tenga en cuenta que, una vez obtenida la primera configuración de feature flags, esta se actualiza periódicamente, pero incluso si la actualización falla por cualquier motivo, el cliente Kameleoon seguirá funcionando con la configuración anterior.
Puede utilizar el método isReadyAsync() para comprobar si ha finalizado la inicialización del cliente Kameleoon.
Como alternativa, un callback auxiliar puede encapsular la lógica de activación de feature flags y la implementación de las variaciones. El mejor enfoque (isReadyAsync() o callback) depende de las preferencias y del caso de uso concreto. Utilice isReadyAsync() cuando se espere que el SDK esté listo para utilizarse pronto. Por ejemplo, isReadyAsync() resulta apropiado al ejecutar un feature flag en un diálogo al que probablemente los usuarios no accedan durante los primeros segundos o minutos de navegación por la aplicación. Se recomienda usar un callback cuando exista una alta probabilidad de que el SDK todavía se esté inicializando. Por ejemplo, un feature flag que aparezca en pantalla en el lanzamiento de la aplicación debería utilizar un callback que haga que la aplicación espere hasta que el SDK esté listo o hasta que expire un tiempo de espera especificado.
Es responsabilidad suya, como desarrollador de la aplicación, asegurarse de que la lógica del código de su aplicación sea correcta en el contexto de los tests A/B con Kameleoon. Una buena práctica consiste en asumir siempre que el usuario de la aplicación puede quedar excluido del feature flag cuando el cliente Kameleoon aún no está listo. Esta exclusión es fácil de implementar, ya que se corresponde con la implementación de la variación por defecto o de referencia. Los ejemplos de código del siguiente apartado muestran ejemplos de este enfoque.
Ya está listo para implementar la gestión de funcionalidades y los feature flags. Consulte la sección Referencia para conocer más detalles sobre los métodos adicionales.
Activación de un feature flag
Recuperar la configuración de un flag
Para implementar un feature flag en su código, primero debe crear un feature flag en su cuenta Kameleoon.
Para determinar si un feature flag está activo para un usuario específico, debe recuperar su configuración. Utilice el método getFeatureVariationKey() o isFeatureActive() para recuperar la configuración según el featureKey.
Utilice el método isFeatureActive() si desea recuperar la configuración de un feature flag simple que solo tiene un estado ON u OFF, en lugar de feature flags más complejos con varias variaciones u opciones de segmentación.
El método getFeatureVariationKey() recupera la configuración de un experimento de funcionalidad con varias variaciones. Puede utilizar el método para obtener una clave de variación para un usuario determinado proporcionando visitorCode y featureKey como argumentos obligatorios.
Los feature flags pueden tener variables asociadas que se utilizan para personalizar su comportamiento. Para recuperar estas variables, utilice el método getFeatureVariationVariables() después de llamar a getFeatureVariationKey(), ya que debe obtener el variationKey del usuario.
Para comprobar si un feature flag está activo, solo necesita utilizar un método. Elija isFeatureFlagActive si desea saber si un feature flag está activado o desactivado. Para escenarios más complejos, como cambiar dinámicamente el comportamiento de la funcionalidad, utilice getFeatureFlagVariables.
Añadir puntos de datos para segmentar un usuario o filtrar / desglosar visitas en los informes
Para segmentar a un usuario, asegúrese de haber añadido los puntos de datos relevantes a su perfil antes de recuperar la variación de la funcionalidad o de comprobar si el flag está activo. Utilice el método addData() para añadir estos puntos de datos al perfil del usuario.
Para recuperar puntos de datos recopilados en otros dispositivos o para acceder a datos pasados del usuario (recopilados del lado del cliente al utilizar Kameleoon en modo híbrido), utilice el método getRemoteVisitorData(). Este método obtiene datos de forma asíncrona desde los servidores. Llame a getRemoteVisitorData() antes de recuperar la variación o de comprobar si el feature flag está activo, ya que es posible que estos datos sean necesarios para asignar a un usuario a una variación determinada de un feature flag.
Para obtener más información sobre las condiciones de segmentación disponibles, consulte el artículo detallado sobre el tema.
Además, los puntos de datos que añada al perfil del visitante estarán disponibles al analizar sus experimentos, lo que le permitirá filtrar y desglosar los resultados por factores como el dispositivo y el navegador. Recuerde llamar al método flush() para enviar los datos almacenados a los servidores de Kameleoon.
Si necesita rastrear puntos de datos adicionales más allá de lo que se recopila automáticamente, puede utilizar la funcionalidad de Datos Personalizados de Kameleoon. Los datos personalizados le permiten capturar y analizar información específica relevante para sus experimentos. No olvide llamar al método flush() para enviar los datos recopilados a los servidores de Kameleoon para su análisis.
Seguimiento de la exposición a flags y de las conversiones de objetivos
Kameleoon rastreará automáticamente la exposición de los visitantes a los flags en cuanto llame a uno de estos métodos:
getFeatureVariationKey()
getFeatureVariable()
isFeatureActive()
Cuando un usuario completa una acción deseada (por ejemplo, realizar una compra), se cuenta como una conversión. Para rastrear las conversiones debe utilizar el método trackConversion() e indicar los parámetros visitorCode y goalId.
Uso de una clave de bucketing personalizada
De forma predeterminada, Kameleoon utiliza un ID único y anónimo del visitante (visitorCode) para asignar a los usuarios a las variaciones de los feature flags. Este ID se genera y se almacena normalmente en el dispositivo del usuario (en una cookie del navegador para los SDKs cliente y servidor, en almacenamiento persistente para los SDKs móviles). Sin embargo, en determinados escenarios es posible que necesite garantizar que todos los usuarios de una misma organización vean la misma variante de un feature flag.
La opción Clave de bucketing personalizada le permite anular este comportamiento predeterminado proporcionando su propio identificador personalizado para el bucketing. Esta anulación garantiza que la lógica de asignación de Kameleoon utilice la clave que especifique en lugar del visitorCode predeterminado.
Casos de uso
Utilizar una clave de bucketing personalizada es esencial para mantener la coherencia y la precisión en las asignaciones de feature flags, especialmente en estas situaciones:
- Experimentos a nivel de cuenta u organización: para productos B2B o escenarios en los que quiera asignar a todos los usuarios de la misma organización a la misma variación, puede usar un identificador como
accountId. Las claves de bucketing personalizadas son cruciales para los tests A/B de funcionalidades que afectan a todo un equipo o empresa.
Al implementar una clave de bucketing personalizada, garantiza una mayor coherencia y precisión en sus experimentos, lo que se traduce en resultados más fiables y en una mejor experiencia del usuario.
Detalles técnicos
Cuando configura una clave de bucketing personalizada para un feature flag, proporciona a Kameleoon un identificador específico de los datos de su aplicación:
try {
await kameleoonClient.addData(CustomData.withIndex(index, values: ["newVisitorCode"]))
} on KameleoonException {
// Generic exception in native plugin integration occurred.
}
- Proporcionar la clave personalizada: proporciona su identificador personalizado al SDK de Kameleoon mediante el método
addData(). En este método pasará la clave de bucketing personalizada elegida como objeto CustomData. Aquí, newVisitorCode se refiere al identificador que desea utilizar para su bucketing (por ejemplo, el nuevo userId o accountId).
Para que la clave de bucketing personalizada funcione correctamente, también debe estar definida y configurada para el feature flag durante el proceso de creación o edición del flag. Sin esta configuración correspondiente, el bucketing del SDK no aplicará su clave personalizada. Para obtener instrucciones detalladas sobre cómo configurarlo en Kameleoon, consulte este artículo.
- Lógica de bucketing: una vez proporcionada la clave de bucketing personalizada mediante el método
addData(), todos los cálculos de hash para asignar usuarios a variaciones utilizarán este newVisitorCode (su clave personalizada) en lugar del visitorCode predeterminado. El uso de newVisitorCode significa que la decisión de bucketing se vincula a su identificador personalizado, garantizando asignaciones coherentes en distintos contextos en los que esté presente dicho identificador.
- Seguimiento de datos y analítica: es crucial tener en cuenta que, aunque se utiliza
newVisitorCode (su clave personalizada) para las decisiones de bucketing, todos los datos posteriores (eventos de seguimiento y conversiones, por ejemplo) se envían y se asocian con el visitorCode original. Esta separación garantiza que sus analíticas reflejen con precisión los recorridos e interacciones individuales de los usuarios dentro del contexto más amplio de su experimento, incluso cuando el bucketing se realiza a un nivel superior (como una cuenta) o a través de varios dispositivos/sesiones. Sus datos originales de visitante permanecen intactos para informes completos.
Requisitos técnicos
Para utilizar eficazmente una clave de bucketing personalizada:
- La clave debe ser una
String.
- Debe ser única para la entidad que tenga la intención de bucketizar (por ejemplo, si utiliza un
userId, el ID de cada usuario debe ser único).
- La clave debe estar disponible para el SDK en el momento exacto en el que se evalúa la decisión del feature flag para ese usuario o solicitud.
Condiciones de segmentación
Los SDKs de Kameleoon admiten una variedad de condiciones de segmentación predefinidas que puede utilizar para segmentar a los usuarios en sus campañas. Para conocer la lista de condiciones que admite este SDK, consulte usar el historial de visitas para segmentar usuarios.
También puede utilizar sus propios datos externos para segmentar a los usuarios.
Logging
El SDK genera registros (logs) para reflejar diversos procesos e incidencias internos.
Niveles de log
El SDK admite la configuración del logging limitándolo por nivel de log.
// The `none` log level does not allow logging.
KameleoonLogger.setLogLevel(LogLevel.none);
// The `error` log level only allows logging issues that may affect the SDK's main behaviour.
KameleoonLogger.setLogLevel(LogLevel.error);
// The `warning` log level allows logging issues which may require additional attention.
// It extends the `error` log level.
// The `warning` log level is a default log level.
KameleoonLogger.setLogLevel(LogLevel.warning);
// The `info` log level allows logging general information on the SDK's internal processes.
// It extends the `warning` log level.
KameleoonLogger.setLogLevel(LogLevel.info);
// The `DEBUG` level logs additional details about the SDK’s internal processes and extends the `INFO` level
// with more granular. diagnostic output.
// This information is not intended for end-user interpretation but can be sent to support
// to assist with internal troubleshooting.
KameleoonLogger.setLogLevel(LogLevel.debug);
Gestión personalizada de los logs
De forma predeterminada, el SDK escribe sus logs en la salida de consola. Este comportamiento puede sobrescribirse.
La limitación del logging por nivel de log se realiza independientemente de la lógica de gestión de los logs.
import 'package:logging/logging.dart' as logging;
class CustomLogger extends Logger {
final logger = logging.Logger("CustomLogger");
// `log` method accepts logs from the SDK
@override
void log(LogLevel level, String message) {
// Custom log handling logic here. For example:
switch (level) {
case LogLevel.error:
logger.severe(message);
break;
case LogLevel.warning:
logger.warning(message);
break;
case LogLevel.info:
logger.info(message);
break;
case LogLevel.debug:
logger.fine(message);
break;
default:
break;
}
}
}
// Log level filtering is applied separately from log handling logic.
// The custom logger will only accept logs that meet or exceed the specified log level.
// Ensure the log level is set correctly.
KameleoonLogger.setLogLevel(LogLevel.debug); // Optional, defaults to `LogLevel.warning`.
KameleoonLogger.setLogger(CustomLogger());
Manejo de errores
Manejar los errores se considera una buena práctica para hacer su aplicación más estable y evitar problemas técnicos. La mayoría de los métodos de KameleoonClient pueden lanzar un error KameleoonException.
Dado que puede resultar difícil aplicar parches a la versión del SDK en el lado del cliente Android, se recomienda envolver cada método del SDK en una cláusula try que capture el KameleoonException y el tipo de error Throwable para prevenir otros errores fatales.
Por ejemplo:
try {
// Calling a method of the SDK
} on KameleoonException {
// Handling expected exceptions
} on Exception {
// Any other error
}
Referencia
Esta es la documentación de referencia completa del SDK de Flutter.
Inicialización
Una vez que haya instalado el SDK en su aplicación, debe inicializar Kameleoon. Todas las interacciones de su aplicación con el SDK, como la activación de un experimento, se realizan a través de este objeto cliente Kameleoon.
create()
Llame a este método antes que a cualquier otro para inicializar el SDK. Este método pertenece a KameleoonClientFactory. Su aplicación realiza todas las interacciones con el SDK utilizando el objeto KameleoonClient resultante que crea este método.
Puede personalizar el comportamiento del SDK (por ejemplo, el entorno, las credenciales, etc.) proporcionando un objeto de configuración. De lo contrario, el SDK intenta encontrar su archivo de configuración y lo utiliza en su lugar.
import 'package:kameleoon_client_flutter/kameleoon_client_flutter.dart'
final siteCode = "a8st4f59bj";
try {
// pass client configuration and visitorCode as arguments
final config = KameleoonClientConfig(
refreshIntervalMinutes: 15, // 60 minutes by default, optional
defaultTimeoutMilliseconds: 10000, // 10_000 milliseconds by default, optional
dataExpirationIntervalMinutes: 1440 * 365, // infinity by default, optional
trackingIntervalMilliseconds: 500, // 1000 milliseconds by default, optional
environment: "staging", // optional
isUniqueIdentifier: false, // false by default, optional
domain: "example.com" // web only option, optional
networkDomain: "company.com", // web only option, optional
defaultDataFile: "{...}" // optional
);
final visitorCode = "yourVisitorCode";
final kameleoonClient = KameleoonClientFactory.create(siteCode, visitorCode: visitorCode, config: config);
} on SiteCodeIsEmpty catch (ex) {
// Exception indicates that the provided siteCode is empty
} on VisitorCodeInvalid catch (ex) {
// Exception indicates that the provided visitorCode is invalid
} on Exception catch (ex) {
// Any other error
}
try {
// generate visitorCode automatically and use default Kameleoon client config
final kameleoonClient = KameleoonClientFactory.create(siteCode);
} on SiteCodeIsEmpty catch (ex) {
// Exception indicates that the provided siteCode is empty
} on Exception catch (ex) {
// Any other error
}
Argumentos
| Nombre | Tipo | Descripción | Por defecto |
|---|
| siteCode (obligatorio) | String | Una clave única que identifica el proyecto Kameleoon utilizado con el SDK. | |
| visitorCode (opcional) | String | Un identificador de visitante opcional. Si está disponible, utilice su ID de usuario interno; de lo contrario, el SDK generará uno automáticamente. | nil |
| config (opcional) | KameleoonClientConfig | Si no se proporciona la configuración del SDK, el SDK utilizará automáticamente la configuración predeterminada. | nil |
Valor devuelto
| Tipo | Descripción |
|---|
KameleoonClient | Una instancia de la clase KameleoonClient que su aplicación puede utilizar para gestionar sus experimentos y feature flags. |
Excepciones lanzadas
| Tipo | Descripción |
|---|
VisitorCodeInvalid | Excepción que indica que el código de visitante proporcionado no es válido. Está vacío o tiene más de 255 caracteres. |
SiteCodeIsEmpty | Excepción que indica que el código de sitio especificado es una cadena vacía, que es un valor no válido. |
isReadyAsync()
Para los SDKs móviles, el cliente Kameleoon no puede inicializarse de inmediato porque debe realizar una llamada al servidor para recuperar la configuración actual de los feature flags activos. Utilice isReadyAsync() para comprobar si el SDK está listo, llamando a este método antes de activar cualquier feature flag.
Como alternativa, puede utilizar un callback (consulte el método runWhenReady() para más detalles).
final ready = kameleoonClient.isReadyAsync();
Valor devuelto
| Nombre | Tipo | Descripción |
|---|
| ready | bool | Booleano que representa el estado del SDK (correctamente inicializado o aún no listo para usarse). |
runWhenReady()
Para los SDKs móviles, el cliente Kameleoon no puede inicializarse de inmediato porque debe realizar una llamada al servidor para recuperar la configuración actual de todos los feature flags activos. Utilice el método runWhenReady() de la clase KameleoonClient para pasar un callback que se ejecutará en cuanto el SDK esté listo para usarse. También puede establecer un tiempo de espera.
El callback indicado como primer argumento de este método debe ser una instancia de un tipo Function(bool ready). Si ready es true, el cliente Kameleoon está listo y debería contener el código que activa un feature flag e implementa las variaciones. De lo contrario, se habrá producido el tiempo de espera especificado antes de que se inicialice el cliente. El callback debería contener el código que implementa la variación de referencia, ya que el usuario quedará excluido del feature flag si se produce un timeout.
kameleoonClient.runWhenReady((ready) async {
final defaultProductsNumber = 5;
if (ready) {
late int recommendedProductsNumber;
try {
recommendedProductsNumber = await kameleoonClient.getFeatureVariable("feature_key", "product_number");
} on Exception {
recommendedProductsNumber = defaultProductsNumber;
}
} else {
recommendedProductsNumber = defaultProductsNumber;
}
setState(() {
_recommendedProductsNumber = recommendedProductsNumber;
});
}, 2000);
Argumentos
| Nombre | Tipo | Descripción |
|---|
| callback (obligatorio) | Function(bool) | Objeto callback con el flag ready. |
| timeout (opcional) | Duration | Tiempo de espera (en milisegundos). Si no se proporciona, se utilizará el valor por defecto de defaultTimeoutMilliseconds (de KameleoonClientConfig) milisegundos. |
Feature flags y variaciones
isFeatureActive()
- 📨 Envía datos de seguimiento a Kameleoon
Para activar un feature toggle, llame a este método. Este método acepta un featureKey como argumento obligatorio para comprobar si la funcionalidad especificada estará activa para un visitante.
Si el visitante nunca ha estado asociado a este feature flag, el método devuelve un valor booleano aleatorio (true si se debe mostrar esta funcionalidad al visitante, false en caso contrario). Si el visitante ya está registrado con este feature flag, este método devuelve el valor previo del feature flag.
Asegúrese de configurar un manejo de errores adecuado, tal como se muestra en el código de ejemplo, para capturar las posibles excepciones.
Kameleoon utiliza el seguimiento para contabilizar sesiones y visitantes cuando se llaman determinados métodos como isFeatureActive(), getVariation() o getVariations().Utilice el valor predeterminado true para el parámetro track cuando exponga a los visitantes a una variación y necesite contabilizarlos. Establezca el parámetro track a false únicamente si llama a estos métodos antes de exponer a los visitantes.Por ejemplo, si llama a getVariations() para recuperar todas las variaciones antes de exponer a los visitantes, establezca el parámetro track en false. Esta configuración evita que Kameleoon contabilice prematuramente una sesión. Posteriormente podrá activar el seguimiento cuando exponga explícitamente al visitante.Kameleoon envía los datos de seguimiento cada segundo por defecto. Puede configurar este intervalo hasta cinco segundos mediante la opción de configuración del intervalo de seguimiento. Kameleoon agrupa los eventos de seguimiento en una única sesión siempre que el intervalo entre eventos sea inferior a 30 minutos. Si transcurren más de 30 minutos entre eventos de seguimiento, Kameleoon los cuenta como sesiones separadas. Una visita aparece en sus informes 30 minutos después del último evento registrado en la sesión.
String featureKey = "new_checkout";
bool hasNewCheckout = false;
try {
hasNewCheckout = await kameleoonClient.isFeatureActive(featureKey);
} on SDKNotReady {
// Exception indicates that the SDK has not completed its initialization yet.
} on FeatureNotFound {
// The error has occurred; feature flag isn't found in current configuration.
} on KameleoonException {
// Generic exception in native plugin integration occurred.
} on Exception {
// Any other error
}
if (hasNewCheckout) {
// Implement new checkout code here
}
El método isFeatureActive() evalúa la variante servida, no el estado del flag maestro. Si excluye reglas, el método utiliza el estado predeterminado Entonces, para todos los demás servir. Si selecciona Off para este estado predeterminado, el método siempre devolverá false incluso cuando el feature flag maestro esté On.
Argumentos
| Nombre | Tipo | Descripción |
|---|
| featureKey | String | Clave única de la funcionalidad que desea exponer a un usuario. Este campo es obligatorio. |
| track | bool | Un parámetro opcional para activar o desactivar el seguimiento de la evaluación de la funcionalidad (true por defecto). |
Valor devuelto
| Tipo | Descripción |
|---|
Future<bool> | Valor de la funcionalidad registrado para un visitante. |
Excepciones lanzadas
| Tipo | Descripción |
|---|
| SDKNotReady | Excepción que indica que el SDK no ha completado su inicialización. |
| FeatureNotFound | Excepción que indica que el ID de la funcionalidad solicitada no se encontró en la configuración interna del SDK. Esta excepción suele significar que el feature flag no se ha activado en el lado de Kameleoon (pero el código que implementa la funcionalidad ya está desplegado en la aplicación). |
| PlatformException | Excepción que indica que la integración del plugin nativo no funciona correctamente. |
getVariation()
- 📨 Envía datos de seguimiento a Kameleoon (según el parámetro
track)
Recupera la Variation asignada a un visitante determinado para un feature flag específico.
Este método toma visitorCode y featureKey como argumentos obligatorios. El argumento track es opcional y su valor predeterminado es true.
Devuelve la Variation asignada al visitante. Si el visitante no está asociado a ninguna regla de feature flag, el método devuelve la Variation por defecto para el feature flag indicado.
Asegúrese de que su código implementa un manejo de errores adecuado para gestionar las posibles excepciones.
La variación por defecto se refiere a la variación asignada a un visitante cuando este no coincide con ninguna regla de entrega predefinida para un feature flag. Dicho de otro modo, es la variación de respaldo que se aplica a todos los usuarios que no son segmentados por reglas específicas. Está representada por la variación de la sección “Entonces, para todos los demás…” en una interfaz de gestión.
final String featureKey = "featureKey";
Variation? variation;
try {
variation = await client.getVariation(featureKey);
// disabling tracking
variation = await client.getVariation(featureKey, track: false);
} on SDKNotReady {
// Exception indicating that the SDK has not completed its initialization yet.
} on FeatureNotFound {
// The feature key is not in the configuration file that has been fetched by the SDK.
} on FeatureEnvironmentDisabled {
// The feature flag is disabled for the environment.
}
String? title = variation?.variables['title']?.value;
switch (variation?.key) {
case "on":
// Main variation key is selected for visitorCode
break;
case "alternative_variation":
// Alternative variation key
break;
default:
// Default variation key
break;
}
Argumentos
| Nombre | Tipo | Descripción | Por defecto |
|---|
| visitorCode (obligatorio) | String | Identificador único del visitante. | |
| featureKey (obligatorio) | String | Clave de la funcionalidad que desea exponer a un visitante. | |
| track (opcional) | bool | Un parámetro opcional para activar o desactivar el seguimiento de la evaluación de la funcionalidad. | true |
Valor devuelto
| Tipo | Descripción |
|---|
Future<Variation> | Una Variation asignada a un visitante determinado para un feature flag específico. |
Excepciones lanzadas
| Tipo | Descripción |
|---|
VisitorCodeInvalid | Excepción que indica que el código de visitante proporcionado no es válido. Está vacío o tiene más de 255 caracteres. |
FeatureNotFound | Excepción que indica que la clave de funcionalidad solicitada no se encontró en la configuración interna del SDK. Esto suele significar que el feature flag no está activado en la aplicación Kameleoon (pero el código que implementa la funcionalidad ya está desplegado en la aplicación). |
FeatureEnvironmentDisabled | Excepción que indica que el feature flag está deshabilitado para el entorno actual del visitante (por ejemplo, producción, staging o desarrollo). |
getVariations()
- 📨 Envía datos de seguimiento a Kameleoon (según el parámetro
track)
Recupera un mapa de objetos Variation asignados a un visitante determinado en todos los feature flags.
Este método itera sobre todos los feature flags disponibles y devuelve la Variation asignada para cada flag asociado al visitante especificado. Toma onlyActive y track como argumentos opcionales.
- Si
onlyActive se establece en true, el método getVariations() devolverá las variaciones de los feature flags siempre que el usuario no esté bucketizado en la variación off.
- El parámetro
track controla si el método rastrea o no las asignaciones de variaciones. Por defecto, está establecido en true. Si se establece en false, el seguimiento se desactivará.
El mapa devuelto consta de las claves de los feature flags como claves y su Variation correspondiente como valores. Si no hay variación asignada para un feature flag, el método devuelve la Variation por defecto para ese flag.
Debe implementarse un manejo de errores adecuado para gestionar las posibles excepciones.
La variación por defecto se refiere a la variación asignada a un visitante cuando este no coincide con ninguna regla de entrega predefinida para un feature flag. Dicho de otro modo, es la variación de respaldo que se aplica a todos los usuarios que no son segmentados por reglas específicas. Está representada por la variación de la sección “Entonces, para todos los demás…” en una interfaz de gestión.
try {
Map<String, Variation> variations = await kameleoonClient.getVariations();
// only active variations
Map<String, Variation> variations = await kameleoonClient.getVariations(onlyActive: true);
// disable tracking
Map<String, Variation> variations = await kameleoonClient.getVariations(onlyActive: false, track: false);
} on SDKNotReady {
// Exception indicating that the SDK has not completed its initialization yet.
}
Argumentos
| Nombre | Tipo | Descripción | Por defecto |
|---|
| onlyActive (opcional) | bool | Un parámetro opcional que indica si devolver las variaciones para los feature flags activos (true) o para todos (false). | false |
| track (opcional) | bool | Un parámetro opcional para activar o desactivar el seguimiento de la evaluación de la funcionalidad. | true |
Valor devuelto
| Tipo | Descripción |
|---|
Future<Map<String, Variation>> | Mapa que contiene los objetos Variation asignados de los feature flags utilizando las claves de las funcionalidades correspondientes. |
Excepciones lanzadas
| Tipo | Descripción |
|---|
SDKNotReady | Indica que el SDK aún no está completamente inicializado. |
getFeatureList()
Devuelve una lista de claves de feature flags actualmente disponibles para el SDK.
try {
final allFeatureFlagKeys = await kameleoonClient.getFeatureList();
} on KameleoonException {
// Generic exception in native plugin integration occurred.
}
Valor devuelto
| Tipo | Descripción |
|---|
Future<List<String>> | Lista de claves de feature flags |
getDataFile()
Para evaluar todos los feature flags, utilice getVariations(). Este método es más eficiente que llamar a DataFile e iterar sobre los flags con getVariation().
Devuelve la configuración actual del SDK como un objeto DataFile.
try {
final dataFile = await kameleoonClient.getDataFile();
final dateModified = dataFile.dateModified;
} on KameleoonException {
// Generic exception in native plugin integration occurred.
}
Valor devuelto
| Tipo | Descripción |
|---|
DataFile | El DataFile que contiene la configuración del SDK |
Errores lanzados
| Tipo | Descripción |
|---|
SDKNotReady | Indica que el SDK aún no está completamente inicializado. |
setForcedVariation()
El método le permite asignar de forma programática una Variation específica a un usuario, omitiendo el proceso de evaluación estándar. Esto resulta especialmente valioso en experimentos controlados en los que no se requiere la lógica habitual de evaluación o debe omitirse. También puede ser útil en escenarios como la depuración o las pruebas personalizadas.
Cuando se establece una variación forzada, esta anula la lógica de evaluación en tiempo real de Kameleoon. Se omiten procesos como la segmentación, las condiciones de targeting y los cálculos algorítmicos. Para conservar la segmentación y las condiciones de targeting durante un experimento, establezca forceTargeting=false en su lugar.
Una variación forzada se trata igual que una variación evaluada. Se rastrea en la analítica y se almacena en el contexto del usuario como cualquier variación estándar evaluada, garantizando la coherencia en los informes.
El método puede lanzar excepciones en determinadas condiciones (por ejemplo, parámetros no válidos, contexto del usuario o problemas internos). Es esencial un manejo adecuado de las excepciones para garantizar que su aplicación siga siendo estable y resiliente.
final experimentId = 9516;
try {
// Forcing the variation "on" for the experiment 9516 for the visitor
await kameleoonClient.setForcedVariation(experimentId, "on")
// Forcing the variation "on" while preserving segmentation and targeting conditions during the experiment
await kameleoonClient.setForcedVariation(experimentId, "on", forceTargeting: false)
// Resetting the forced variation for the experiment 9516 for the visitor
await kameleoonClient.setForcedVariation(experimentId, null);
} on KameleoonException {
// Handling the exception
}
Argumentos
| Nombre | Tipo | Descripción | Por defecto |
|---|
| experimentId (obligatorio) | int | ID del experimento que será segmentado y seleccionado durante el proceso de evaluación. | |
| variationKey (obligatorio) | String | Clave de variación correspondiente a una Variation que debe forzarse como valor devuelto para el experimento. Si el valor es null, la variación forzada se restablecerá. | |
| forceTargeting (opcional) | bool | Indica si la segmentación del experimento debe forzarse y omitirse (true) o aplicarse como en el proceso de evaluación estándar (false). | true |
Errores lanzados
| Tipo | Descripción |
|---|
SDKNotReady | Indica que el SDK aún no está completamente inicializado. |
FeatureExperimentNotFound | Excepción que indica que el ID del experimento solicitado no se ha encontrado en la configuración interna del SDK. Esto suele ser normal y significa que el experimento correspondiente a la regla aún no se ha activado en el lado de Kameleoon. |
FeatureVariationNotFound | Excepción que indica que la clave (id) de la variación solicitada no se ha encontrado en la configuración interna del SDK. Esto suele ser normal y significa que el experimento correspondiente a la variación aún no se ha activado en el lado de Kameleoon. |
En la mayoría de los casos, solo es necesario manejar el error básico, KameleoonException, como se muestra en el ejemplo. Sin embargo, si distintos tipos de errores requieren una respuesta, gestione cada uno por separado en función de los requisitos específicos. Además, para mayor fiabilidad, pueden manejarse los errores generales del lenguaje incluyendo Exception.
evaluateAudiences()
- 📨 Envía datos de seguimiento a Kameleoon
Este método evalúa a los visitantes frente a todos los segmentos disponibles de Audiences Explorer y rastrea a aquellos que coinciden.
evaluateAudiences() debe llamarse después de que se hayan establecido o actualizado todos los datos relevantes del visitante, y justo antes de obtener una variación de funcionalidad o comprobar un feature flag. Este enfoque garantiza que el visitante sea evaluado con los datos más actuales disponibles, lo que permite una asignación precisa de audiencias en función de todos los criterios.
Tras llamar a este método, puede realizar un análisis detallado del rendimiento de los segmentos en Audiences Explorer.
try {
await kameleoonClient.evaluateAudiences();
} on KameleoonException {
// Handling the exception
}
Errores lanzados
| Tipo | Descripción |
|---|
SDKNotReady | Indica que el SDK aún no está completamente inicializado. |
En la mayoría de los casos, solo es necesario manejar el error básico, KameleoonException, como se muestra en el ejemplo. Sin embargo, si distintos tipos de errores requieren una respuesta, gestione cada uno por separado en función de los requisitos específicos. Además, para mayor fiabilidad, pueden manejarse los errores generales del lenguaje incluyendo Exception.
Objetivos
trackConversion()
- 📨 Envía datos de seguimiento a Kameleoon
Utilice este método para rastrear conversiones. Este método requiere goalId para rastrear la conversión en este objetivo en particular. Además, este método también acepta los argumentos revenue, metadata y negative.
El método trackConversion() no devuelve ningún valor. Este método no es bloqueante, ya que la llamada al servidor se realiza de forma asíncrona.
kameleoonClient.trackConversion(goalId); // default revenue
kameleoonClient.trackConversion(goalId, 10); // provided revenue == 10
// Add metadata
kameleoonClient.trackConversionWithOptParams(goalId, metadata: [CustomData.withIndex(1, values: ["true"])]);
kameleoonClient.trackConversionWithOptParams(goalId, revenue: 10, metadata: [CustomData.withIndex(1, values: ["true"])]);
Argumentos
| Nombre | Tipo | Descripción | Por defecto |
|---|
| goalId (obligatorio) | int | ID del objetivo. | |
| revenue (opcional) | double | Ingresos de la conversión. | 0 |
| negative (opcional) | bool | Define si los ingresos son positivos o negativos. | false |
| metadata (opcional) | List<CustomData> | Metadatos de la conversión. Deben definirse previamente en la aplicación Kameleoon. | [] |
Los valores de los metadatos son accesibles a través de las exportaciones de datos sin procesar y de la página de resultados.Si se proporciona el parámetro metadata, Kameleoon utilizará estos valores especificados para la conversión actual en lugar de lo que se haya recopilado previamente con el método addData(). Si se omite el parámetro, Kameleoon utilizará los últimos valores rastreados para esos CustomData antes de la conversión y dentro de la misma visita.Kameleoon solo considerará los valores de metadatos que se pasen explícitamente como parámetros al método trackConversion().En el ejemplo siguiente, Kameleoon asociará la conversión únicamente con el valor del custom data proporcionado explícitamente como parámetro (aquí: índice 5 con el valor ‘Amex Credit Card’).kameleoonClient.addData([
CustomData.withIndex(5, values: ["Credit Card"]),
CustomData.withIndex(9, values: ["Express Delivery"])
]);
kameleoonClient.trackConversionWithOptParams(1000, metadata: [CustomData.withIndex(5, values: ["Amex Credit Card"])]);
Eventos
onUpdateConfiguration()
Este método se llamaba anteriormente updateConfigurationHandler y se eliminó en la versión 3.0.0 del SDK.
El método onUpdateConfiguration() le permite gestionar el evento cuando la configuración ha actualizado los datos. Recibe un parámetro de entrada, handler. El handler que se llamará cuando se actualice la configuración mediante un evento de configuración en tiempo real.
kameleoonClient.onUpdateConfiguration((timestamp) {
// timestamp value contains the value of Unix time (number of seconds elapsed since January 1, 1970) when configuration was updated.
});
Argumentos
| Nombre | Tipo | Descripción |
|---|
| handler | Function(int)? | El handler que se llamará cuando se actualice la configuración mediante un evento de configuración en tiempo real. |
Datos del visitante
getVisitorCode()
Devuelve el código único de visitante utilizado en el SDK.
final visitorCode = await kameleoonClient.getVisitorCode();
Valor devuelto
| Tipo | Descripción |
|---|
Future<String> | String que representa un código único de visitante utilizado en el SDK. |
addData()
El método addData() añade datos de segmentación al almacenamiento para que otros métodos puedan usar los datos para decidir si segmentar o no al visitante actual.
El método addData() no devuelve ningún valor y no interactúa por sí solo con los servidores back-end de Kameleoon. En su lugar, todos los datos declarados se guardan para su transmisión futura mediante el método flush(). Este enfoque reduce el número de llamadas al servidor realizadas, ya que los datos se suelen agrupar en una única llamada al servidor que se desencadena con flush().
El método trackConversion() también envía cualquier dato previamente asociado, igual que flush(). Lo mismo ocurre con los métodos getVariation() y getVariations() si se activa una regla de experimentación.
Cada visitante solo puede tener una instancia de datos asociados para la mayoría de tipos de datos. Sin embargo, CustomData es una excepción. Los visitantes pueden tener una instancia de CustomData asociada por índice.
try {
await kameleoonClient.addData([
Device(Devices.phone),
CustomData.withIndex(1, values: ["some custom value"]),
Conversion(32, 10f, false),
]);
} on KameleoonException {
// Generic exception in native plugin integration occurred.
}
Argumentos
| Nombre | Tipo | Descripción | Valor por defecto |
|---|
| track (opcional) | bool | Especifica si los datos añadidos son elegibles para el seguimiento. Si se establece en false, los datos se almacenan localmente y solo se utilizan para la evaluación de la segmentación; no se envían a la API de datos de Kameleoon. | true |
| data (obligatorio) | List<Data> | Colección de tipos de datos de Kameleoon. | |
Excepciones
| Tipo | Descripción |
|---|
PlatformException | Excepción que indica que la integración del plugin nativo no funciona correctamente. |
flush()
- 📨 Envía datos de seguimiento a Kameleoon
Los datos asociados al usuario actual mediante el método addData() no se envían al servidor de inmediato. Se almacenan y acumulan hasta que se envían automáticamente con el método trackConversion(), o manualmente llamando al método flush(), lo que le permite controlar exactamente cuándo se vuelcan los datos a los servidores. Por ejemplo, si se llama al método addData() una docena de veces, enviar datos al servidor tras cada invocación de addData() desperdiciaría recursos. Llame a flush() una sola vez al final.
El método flush() no devuelve ningún valor. Este método no es bloqueante, ya que la llamada al servidor se realiza de forma asíncrona.
kameleoonClient.flush(); // Interval tracking (most performant tracking method)
kameleoonClient.flush(instant: true); // Instant tracking
Excepciones lanzadas
| Tipo | Descripción |
|---|
| PlatformException | Excepción que indica que la integración del plugin nativo no funciona correctamente. |
getRemoteData()
Este método se llamaba anteriormente retrieveDataFromRemoteSource y se eliminó en la versión 3.0.0 del SDK.
Utilice este método para recuperar datos desde un servidor remoto de Kameleoon según el siteCode activo y el argumento key (o el visitorCode activo si se omite key). El visitorCode y siteCode se especifican en KameleoonClientFactory.create(). Los datos pueden almacenarse de forma rápida y cómoda en servidores remotos altamente escalables mediante la API de datos de Kameleoon. La aplicación puede entonces recuperar los datos utilizando este método.
Tenga en cuenta que, dado que se requiere una llamada al servidor, este mecanismo es asíncrono.
try {
final data = await kameleoonClient.getRemoteData("test");
} on KameleoonException {
// Generic exception in native plugin integration occurred.
} on Exception {
// Any other error (including network issues).
}
Argumentos
| Nombre | Tipo | Descripción |
|---|
| key | String | La clave con la que están asociados los datos que intenta obtener. Este campo es opcional. |
Valor devuelto
| Tipo | Descripción |
|---|
Future<dynamic> | Future con los datos recuperados para un key específico (o visitorCode si se omite key). |
| Tipo | Descripción |
|---|
| PlatformException | Excepción que indica que la integración del plugin nativo no funciona correctamente. |
| Exception | Excepción que indica que la solicitud ha excedido el tiempo de espera o cualquier otro motivo de fallo. |
getRemoteVisitorData()
getRemoteVisitorData() es un método asíncrono para recuperar los Datos de Visitas de Kameleoon para el visitorCode desde la API de datos de Kameleoon. Este método añade los datos al almacenamiento para que otros métodos los utilicen al tomar decisiones de segmentación.
Los datos obtenidos mediante este método desempeñan un papel importante cuando desea:
- utilizar datos recopilados desde otros dispositivos.
- acceder al historial de un usuario, como datos personalizados recopilados durante visitas anteriores.
Lea este artículo para comprender mejor los posibles casos de uso.
De forma predeterminada, getRemoteVisitorData() recupera automáticamente los datos personalizados almacenados más recientes con scope=Visitor y los adjunta al visitante sin necesidad de llamar a addData(). Resulta especialmente útil para sincronizar datos personalizados entre varios dispositivos.
// Visitor data will be fetched and automatically added for `visitorCode`.
try {
final visitorData = await kameleoonClient.getRemoteVisitorData();
} on KameleoonException {
// Generic exception in native plugin integration occurred.
} on Exception {
// Any other error (including network issues).
}
// If you only want to fetch data and add it yourself manually, set addData == `false`.
try {
final visitorData = await kameleoonClient.getRemoteVisitorData(addData: false);
} on KameleoonException {
// Generic exception in native plugin integration occurred.
} on Exception {
// Any other error (including network issues).
}
// If you want to fetch custom list of data types
final filter = RemoteVisitorDataFilter.withValues(
previousVisitAmount: 25,
currentVisit: true,
conversions: true,
);
try {
final visitorData = await kameleoonClient.getRemoteVisitorData(filter: filter, addData: false);
} on KameleoonException {
// Generic exception in native plugin integration occurred.
} on Exception {
// Any other error (including network issues).
}
Argumentos
| Nombre | Tipo | Descripción |
|---|
| filter | RemoteVisitorDataFilter | Filtro que selecciona qué datos deben recuperarse del historial de visitas. Por defecto, getRemoteVisitorData recupera CustomData de la visita actual y de la última visita anterior (RemoteVisitorDataFilter()). Todos los demás parámetros del filtro tienen false como valor por defecto. Este campo es opcional. |
| addData | boolean | Booleano que indica si el método debe añadir automáticamente los datos recuperados para un visitante. Si no se especifica, el valor por defecto es true. Este campo es opcional. |
Valor devuelto
| Tipo | Descripción |
|---|
Future<List<Data>> | Un array que contiene los datos recuperados para el visitante. |
Excepciones lanzadas
| Tipo | Descripción |
|---|
| PlatformException | Excepción que indica que la integración del plugin nativo no funciona correctamente. |
| Exception | Excepción que indica que la solicitud ha excedido el tiempo de espera o cualquier otro motivo de fallo. |
Uso de parámetros en getRemoteVisitorData()
El método getRemoteVisitorData() ofrece flexibilidad al permitirle definir varios parámetros al recuperar datos sobre visitantes. Tanto si segmenta basándose en objetivos, experimentos o variaciones, se aplica el mismo enfoque a todos los tipos de datos.
Por ejemplo, supongamos que desea recuperar datos sobre visitantes que han completado un objetivo “Transacción de pedido”. Puede especificar parámetros dentro del método getRemoteVisitorData() para afinar su segmentación. Por ejemplo, si solo desea segmentar a los usuarios que convirtieron en el objetivo durante sus últimas cinco visitas, puede establecer el parámetro previousVisitAmount en 5 y conversions en true.
La flexibilidad mostrada en este ejemplo no se limita a los datos de objetivos. Puede usar parámetros dentro del método getRemoteVisitorData() para recuperar datos sobre una variedad de comportamientos del visitante.
A continuación se enumeran las opciones disponibles de RemoteVisitorDataFilter:| Nombre | Tipo | Descripción | Por defecto |
|---|
| previousVisitAmount (opcional) | int | Número de visitas anteriores de las que se recuperan datos. Número entre 1 y 25 | 1 |
| currentVisit (opcional) | boolean | Si es true, se recuperarán los datos de la visita actual. | true |
| customData (opcional) | boolean | Si es true, se recuperarán los datos personalizados. | true |
| geolocation (opcional) | boolean | Si es true, se recuperarán los datos de geolocalización. | false |
| conversions (opcional) | boolean | Si es true, se recuperarán los datos de conversión. | false |
| experiments (opcional) | boolean | Si es true, se recuperarán los datos de experimentos. | false |
| pageViews (opcional, solo web) | boolean | Si es true, se recuperarán los datos de páginas. | false |
| device (opcional, solo web) | boolean | Si es true, se recuperarán los datos del dispositivo. | false |
| browser (opcional, solo web) | boolean | Si es true, se recuperarán los datos del navegador. | false |
| operatingSystem (opcional, solo web) | boolean | Si es true, se recuperarán los datos del sistema operativo. | false |
| kcs (opcional) | boolean | Si es true, se recuperará el Kameleoon Conversion Score (KCS). Requiere el complemento AI Predictive Targeting | false |
| visitorCode (opcional) | boolean | Si es true, Kameleoon recuperará el visitorCode de la visita más reciente y lo utilizará para la visita actual. Esto es necesario si quiere garantizar que el visitante, identificado por su visitorCode, reciba siempre la misma variación en todas las visitas para experimentación cross-device. | true |
| cbs (opcional) | boolean | Si es true, se recuperarán los datos de la puntuación Contextual Bandit. | false |
getVisitorWarehouseAudience()
Recupera todos los datos de audiencia asociados al visitante en su data warehouse. El parámetro opcional warehouseKey suele ser su ID de usuario interno. El parámetro customDataIndex corresponde al custom data de Kameleoon que Kameleoon utiliza para segmentar a sus visitantes. Puede consultar la documentación sobre targeting de warehouse para obtener más detalles. El método devuelve el resultado como un objeto CustomData, confirmando que los datos se han añadido al visitante y están disponibles con fines de segmentación.
Dado que se requiere una llamada al servidor, este mecanismo es asíncrono.
try {
final customData = await kameleoonClient.getVisitorWarehouseAudience(customDataIndex);
} on KameleoonException {
// Generic exception in native plugin integration occurred.
} on Exception {
// Any other error (including network issues).
}
// If you need to specify warehouse key
try {
final customData = await kameleoonClient.getVisitorWarehouseAudience(customDataIndex, "warehouseKey");
} on KameleoonException {
// Generic exception in native plugin integration occurred.
} on Exception {
// Any other error (including network issues).
}
Argumentos
| Nombre | Tipo | Descripción |
|---|
| visitorCode | string | Una cadena de identificación única del visitante; no puede superar los 255 caracteres. |
| customDataIndex | int | Un entero que representa el índice del custom data que desea utilizar para segmentar sus Audiencias de BigQuery. |
| warehouseKey | string | Una clave única para identificar los datos del warehouse (normalmente, su ID de usuario interno). Este campo es opcional. |
Valor devuelto
| Tipo | Descripción |
|---|
Future<CustomData> | Una instancia de CustomData que confirma que los datos se han añadido al visitante. |
Excepciones lanzadas
| Tipo | Descripción |
|---|
| PlatformException | Excepción que indica que la integración del plugin nativo no funciona correctamente. |
| Exception | Excepción que indica que la solicitud ha excedido el tiempo de espera o cualquier otro motivo de fallo. |
setLegalConsent()
Debe utilizar este método para especificar si el visitante ha dado su consentimiento legal para usar sus datos personales. Establecer el parámetro consent en false limita los tipos de datos que puede incluir en las solicitudes de seguimiento. Este método le ayuda a cumplir los requisitos legales y normativos al tiempo que gestiona los datos del visitante de forma responsable. Puede encontrar más información sobre datos personales en la política de gestión del consentimiento.
try {
final customData = await kameleoonClient.setLegalConsent(true);
} on KameleoonException {
// Generic exception in native plugin integration occurred.
} on Exception {
// Any other error (including network issues).
}
Argumentos
| Nombre | Tipo | Descripción |
|---|
| consent | boolean | Un valor booleano que representa el estado del consentimiento legal. true indica que el visitante ha dado su consentimiento legal; false indica que el visitante nunca ha proporcionado o ha retirado el consentimiento legal. Este campo es obligatorio. |
Excepciones lanzadas
| Tipo | Descripción |
|---|
| PlatformException | Excepción que indica que la integración del plugin nativo no funciona correctamente. |
Comportamiento de la revocación del consentimiento
Esto solo se aplica al SDK de Flutter Web.
Cuando llama a setLegalConsent() con consent=false, el SDK no elimina la cookie kameleoonVisitorCode. En su lugar, deja de prolongar la fecha de expiración de la cookie, permitiendo que persista hasta que expire de forma natural.
Si sus requisitos de cumplimiento exigen la eliminación inmediata del archivo de cookie tras la exclusión, debe eliminarlo manualmente utilizando los métodos nativos de gestión de cookies de su framework. El SDK no eliminará el archivo automáticamente.
Tipos de datos
Esta sección enumera los tipos Data admitidos por Kameleoon. Se proporcionan varios tipos de datos estándar, así como el tipo CustomData para definir tipos de datos personalizados.
Conversion
El conjunto de datos Conversion aquí almacenado puede utilizarse para filtrar informes de experimentos y personalización por cualquier objetivo asociado a él.
- Cada visitante puede tener varios objetos
Conversion.
- Puede encontrar el
goalId en la aplicación Kameleoon.
| Nombre | Tipo | Descripción | Por defecto |
|---|
| goalId (obligatorio) | int | ID del objetivo. | |
| revenue (opcional) | double | Ingresos de la conversión | 0 |
| negative (opcional) | bool | Define si los ingresos son positivos o negativos. | false |
| metadata (opcional) | List<CustomData> | Metadatos de la conversión. | [] |
try {
final conversion = Conversion(32, 10);
final conversionMetadata = Conversion(32, 10, false, [CustomData.withIndex(1, values: ["true"])]);
final conversionOptParams = Conversion.withOptParams(32, metadata: [CustomData.withIndex(1, values: ["true"])]);
await kameleoonClient.addData([conversion, conversionMetadata, conversionOptParams]);
} on KameleoonException {
// Generic exception in native plugin integration occurred.
}
CustomData
Este tipo de datos está disponible para ambos tipos de SDKs: Móvil y Web.
CustomData permite asociar fácilmente cualquier tipo de datos a cada visitante. CustomData puede entonces utilizarse como condición de segmentación en los segmentos o como filtro/desglose en los informes de experimentos.
Para obtener más información sobre los datos personalizados, consulte este artículo.
| Nombre | Tipo | Descripción | |
|---|
| index/name (obligatorio) | int/String | Índice o nombre del custom data. Debe proporcionarse index o name para identificar los datos. | |
| overwrite (opcional) | bool | Flag para controlar explícitamente cómo se almacenan los valores y cómo aparecen en los informes. Ver más | true |
| values (opcional) | List<String> | Valores del custom data que se almacenarán. | |
- Cada visitante solo puede tener un
CustomData para cada index único. Añadir otro CustomData con el mismo index sustituirá al CustomData existente.
- El
index del custom data se puede encontrar en el panel de Custom Data en la columna “INDEX”.
- Para evitar que el SDK envíe datos con el índice seleccionado a los servidores de Kameleoon por motivos de privacidad, active la opción Usar estos datos solo localmente con fines de segmentación al crear el custom data.
- Añadir una instancia de
CustomData creada con un nombre cuando la configuración de la instancia del SDK no está actualizada o cuando el nombre no está registrado provocará que los datos se ignoren.
try {
await kameleoonClient.addData([CustomData.withIndex(1, values: ["some custom value"])]);
// With several values
await kameleoonClient.addData(CustomData.withIndex(1, values: ["value 1", "value 2"]))
// To set the 'overwrite' flag to false
await kameleoonClient.addData(CustomData.withIndex(1, overwrite: false, values: ["first value", "second value"]))
// To use a name instead of the index
await kameleoonClient.addData(CustomData.withName("my-custom-data", values: ["value"]))
} on KameleoonException {
// Generic exception in native plugin integration occurred.
}
Device
Este tipo de datos está disponible para ambos tipos de SDKs: Móvil y Web.
Almacena información sobre el dispositivo del usuario.
| Nombre | Tipo | Descripción |
|---|
| device | Devices | Lista de dispositivos: phone, table, desktop. Este campo es obligatorio. |
try {
await kameleoonClient.addData([Device(Devices.phone)]);
} on KameleoonException {
// Generic exception in native plugin integration occurred.
}
Geolocation
Este tipo de datos está disponible para ambos tipos de SDKs: Móvil y Web.
Geolocation contiene los detalles de geolocalización del visitante.
| Nombre | Tipo | Descripción |
|---|
| country (obligatorio) | String | El país del visitante. |
| region (opcional) | String? | La región del visitante. |
| city (opcional) | String? | La ciudad del visitante. |
| postalCode (opcional) | String? | El código postal del visitante. |
| latitude (opcional) | double? | La coordenada de latitud que representa la ubicación del visitante. El número de la coordenada representa grados decimales. |
| longitude (opcional) | double? | La coordenada de longitud que representa la ubicación del visitante. El número de la coordenada representa grados decimales. |
- Cada visitante solo puede tener una
Geolocation. Añadir una segunda Geolocation sobrescribirá la primera.
try {
await kameleoonClient.addData([Geolocation("France", region: "Île-de-France", city: "Paris")]);
} on KameleoonException {
// Generic exception in native plugin integration occurred.
}
Browser
El tipo de datos solo está disponible para el SDK Web
El conjunto de datos Browser aquí almacenado puede utilizarse para filtrar los informes de experimentos y personalización por cualquier valor asociado a él.
| Nombre | Tipo | Descripción |
|---|
| browser (obligatorio) | Browsers | Lista de navegadores: chrome, internetExplorer, firefox, safari, opera, other. |
| version (opcional) | double? | Versión del navegador, un número de punto flotante representa la versión mayor y menor del navegador |
try {
await kameleoonClient.addData([Browser(Browsers.chrome)]);
await kameleoonClient.addData([Browser(Browsers.chrome, 10.0)]);
} on KameleoonException {
// Generic exception in native plugin integration occurred.
}
PageView
Este tipo de datos solo está disponible para los SDKs Web.
| Nombre | Tipo | Descripción |
|---|
| url | String | URL de la página vista. Este campo es obligatorio. |
| title | String | Título de la página vista. Este campo es obligatorio. |
| referrers | List<int> | Referrers de las páginas vistas. Este campo es opcional. |
El índice (ID) del referrer está disponible en la página de configuración del canal de adquisición de la aplicación Kameleoon. Tenga cuidado: este índice empieza en 0, por lo que el primer canal de adquisición que cree para un sitio determinado tendrá el ID 0, no 1.
try {
await kameleoonClient.addData([PageView("https://url.com", "title", [3])]);
} on KameleoonException {
// Generic exception in native plugin integration occurred.
}
OperatingSystem
Este tipo de datos solo está disponible para los SDKs Web.
OperatingSystem contiene información sobre el sistema operativo del dispositivo del visitante.
Cada visitante solo puede tener un OperatingSystem. Añadir un segundo OperatingSystem sobrescribirá el primero.
| Nombre | Tipo | Descripción |
|---|
| type | OperatingSystems | Lista de sistemas operativos: windows, mac, ios, linux, android, windowsPhone. Este campo es obligatorio. |
try {
await kameleoonClient.addData([OperatingSystem(OperatingSystem.linux)]);
} on KameleoonException {
// Generic exception in native plugin integration occurred.
}
Cookie
Este tipo de datos solo está disponible para los SDKs Web.
Cookie contiene información sobre la cookie almacenada en el dispositivo del visitante.
| Nombre | Tipo | Descripción |
|---|
| cookies | Map<String, String> | Un mapa de objetos de cadenas que consta de claves y valores de cookies. Este campo es obligatorio. |
Cada visitante solo puede tener una Cookie. Añadir una segunda Cookie sobrescribirá la primera.
try {
await kameleoonClient.addData([Cookie({
"my_key1": "my_value1",
"my_key2": "my_value2"
})]);
} on KameleoonException {
// Generic exception in native plugin integration occurred.
}
Tipos devueltos
DataFile
El DataFile contiene los detalles de configuración del SDK.
Puede ampliarse con información adicional si los clientes lo requieren. Si necesita más detalles, póngase en contacto con su Customer Success Manager.
| Nombre | Tipo | Descripción |
|---|
| featureFlags | Map<String, FeatureFlag> | Un mapa de objetos FeatureFlag, indexado por las claves de los feature flags. |
| dateModified | int | La marca de tiempo (en milisegundos) que indica cuándo se modificó por última vez el DataFile. |
// Retrieves the map of feature flags from the DataFile.
// The map is keyed by feature flag identifiers, with each value being a FeatureFlag object.
final featureFlags = dataFile.featureFlags;
// Retrieves the last modification timestamp of the DataFile.
// The value is an int representing milliseconds since the Unix epoch.
final dateModified = dataFile.dateModified;
FeatureFlag
FeatureFlag representa un conjunto de propiedades que definen un feature flag en sí mismo, por ejemplo, sus Variations, Rules, estado del entorno y otros detalles relacionados.
Puede ampliarse con información adicional si los clientes lo requieren. Si necesita más detalles, póngase en contacto con su Customer Success Manager.
| Nombre | Tipo | Descripción |
|---|
| environmentEnabled | bool | Indica si el feature flag está habilitado en el entorno actual. |
| defaultVariationKey | String | La clave de la variación por defecto asociada al feature flag. |
| variations | Map<String, Variation> | Un mapa de objetos Variation, indexado por las claves de variación. |
| rules | List<Rule> | Una lista de objetos Rule |
// Check whether the feature flag is enabled in the current environment
final isEnvironmentEnabled = featureFlag.environmentEnabled
// Retrieve the key of the default variation
final defaultVariationKey = featureFlag.defaultVariationKey
// Retrieve the default variation object
final defaultVariation = featureFlag.defaultVariation
// Retrieve all variations of the feature flag as a map (key = variation key, value = Variation object)
final variations = featureFlag.variations
// Retrieve all targeting rules associated with the feature flag
final rules = featureFlag.rules
Rule
Rule representa un conjunto de propiedades que definen una regla en sí misma, por ejemplo, sus Variations.
Puede ampliarse con información adicional si los clientes lo requieren. Si necesita más detalles, póngase en contacto con su Customer Success Manager.
| Nombre | Tipo | Descripción |
|---|
| variations | Map<String, Variation> | Un mapa de objetos Variation, indexado por las claves de variación. |
// Retrieve all variations of the rule as a map (key = variation key, value = Variation object)
final variations = rule.variations
Variation
Variation contiene información sobre la variación asignada al visitante (o la variación por defecto, si no existe una asignación específica).
| Nombre | Tipo | Descripción |
|---|
| name | String | El nombre de la variación. |
| key | String | La clave única que identifica la variación. |
| id | int? | El ID de la variación asignada (o -1 si es la variación por defecto). |
| experimentId | int? | El ID del experimento asociado a la variación (o -1 si es la predeterminada). |
| variables | Map<String, Variable> | Un mapa que contiene las variables de la variación asignada, indexadas por nombres de variable. Puede ser una colección vacía si no hay variables asociadas. |
- El objeto
Variation proporciona detalles sobre la variación asignada y su experimento asociado, mientras que el objeto Variable contiene detalles específicos sobre cada variable dentro de una variación.
- Asegúrese de que su código maneja el caso en el que
id o experimentId puedan ser -1, indicando una variación por defecto.
- El mapa
variables puede estar vacío si no hay variables asociadas a la variación.
// Retrieving the variation name
var variationName = variation.name
// Retrieving the variation key
var variationKey = variation.key;
// Retrieving the variation id
var variationId = variation.id;
// Retrieving the experiment id
var experimentId = variation.experimentId;
// Retrieving the variables map
var variables = variation.variables;
Variable
Variable contiene información sobre una variable asociada a la variación asignada.
| Nombre | Tipo | Descripción |
|---|
| key | String | La clave única que identifica la variable. |
| type | String | El tipo de la variable. Valores posibles: BOOLEAN, NUMBER, STRING, JSON. |
| value | dynamic | El valor de la variable, que puede ser de los siguientes tipos: bool, int, double, String, Map<String, dynamic> (objeto json), [dynamic] (array json). |
// Retrieving the variables map
var variables = variation.variables;
// Variable type can be retrieved for further processing
var type = variables["isDiscount"]?.type ?? "";
// Retrieving the variable value by key
var isDiscount = variables["isDiscount"]?.value as bool? ?? false;
// Variable value can be of different types
var title = variables["title"]?.value as String? ?? "";
Métodos obsoletos
Estos métodos están obsoletos y se eliminarán en la versión 4.0.0 del SDK.
isReady()
Para los SDKs móviles, el cliente Kameleoon no puede inicializarse de inmediato porque debe realizar una llamada al servidor para recuperar la configuración actual de los feature flags activos. Utilice isReady() para comprobar si el SDK está listo, llamando a este método antes de activar cualquier feature flag.
Como alternativa, puede utilizar un callback (consulte el método runWhenReady() para más detalles).
final ready = kameleoonClient.isReady();
Valor devuelto
| Nombre | Tipo | Descripción |
|---|
| ready | bool | Booleano que representa el estado del SDK (correctamente inicializado o aún no listo para usarse). |
getFeatureVariationKey()
- 📨 Envía datos de seguimiento a Kameleoon
Utilice este método para obtener la clave de variación de funcionalidad de un visitante. Este método toma featureKey como argumento obligatorio para recuperar la clave de variación del usuario especificado.
Si el visitante nunca ha estado asociado a este feature flag, el SDK devuelve una clave de variación asignada aleatoriamente (según las reglas del feature flag). Si el visitante ya está registrado con este feature flag, este método devuelve la clave de la variación anterior. Si el usuario no coincide con ninguna de las reglas, se devolverá el valor por defecto, definido en la cuenta de su cliente.
Asegúrese de configurar un manejo de errores adecuado, tal como se muestra en el código de ejemplo, para capturar las posibles excepciones.
String featureKey = "new_checkout";
String variationKey = "";
try {
variationKey = await kameleoonClient.getFeatureVariationKey(featureKey);
} on SDKNotReady {
// Exception indicates that the SDK has not completed its initialization yet.
} on FeatureNotFound {
// The error has occurred; feature flag isn't found in current configuration.
} on FeatureEnvironmentDisabled {
// The feature flag is disabled for the environment.
} on KameleoonException {
// Generic exception in native plugin integration occurred.
} on Exception {
// Any other error.
}
switch(variationKey) {
case 'on':
// Main variation key is selected for visitorCode
break;
case 'alternative_variation':
// Alternative variation key
break;
default:
// Default variation key
break;
}
Argumentos
| Nombre | Tipo | Descripción |
|---|
| featureKey | String | Clave de la funcionalidad que desea exponer a un usuario. Este campo es obligatorio. |
Valor devuelto
| Tipo | Descripción |
|---|
Future<String> | Clave de variación del feature flag registrado para un visitante. |
Excepciones lanzadas
| Tipo | Descripción |
|---|
| SDKNotReady | Excepción que indica que el SDK no ha completado su inicialización. |
| FeatureNotFound | Excepción que indica que el ID de la funcionalidad solicitada no se encontró en la configuración interna del SDK. Esta excepción suele significar que el feature flag no se ha activado en el lado de Kameleoon (pero el código que implementa la funcionalidad ya está desplegado en la aplicación). |
| PlatformException | Excepción que indica que la integración del plugin nativo no funciona correctamente. |
getActiveFeatures()
- Utilice
getVariations() en su lugar.
- Anteriormente llamado
getFeatureListForVisitorCode, eliminado en la versión 4.0.0 del SDK.
El método getActiveFeatures recupera información sobre los feature flags activos disponibles para el visitante.
try {
final activeFeatures = await kameleoonClient.getActiveFeatures();
} on KameleoonException {
// Generic exception in native plugin integration occurred.
}
Valor devuelto
| Tipo | Descripción |
|---|
Future<Map<String, Variation>> | Mapa que contiene las variaciones asignadas de las funcionalidades activas utilizando las claves de las funcionalidades activas correspondientes. |
getFeatureVariable()
- 📨 Envía datos de seguimiento a Kameleoon
- Utilice
getVariation() en su lugar.
- Este método se llamaba anteriormente
obtainFeatureVariable y se eliminó en la versión 3.0.0 del SDK.
Este método obtiene el valor de una variable de una clave de variación para un usuario específico. Toma featureKey y variableKey como argumentos obligatorios.
Si el visitante nunca ha estado asociado a featureKey, el SDK devuelve un valor de variable asignado aleatoriamente para la clave de variación especificada (según las reglas del feature flag). Si el visitante ya está registrado con este feature flag, este método devuelve el valor de la variable para la variación previamente registrada. Si el usuario no coincide con ninguna de las reglas, se devuelve el valor de variable por defecto.
Asegúrese de configurar un manejo de errores adecuado, tal como se muestra en el código de ejemplo, para capturar las posibles excepciones.
String featureKey = "feature_key";
String variableKey = "product_number";
int recommendedProductsNumber = 5;
try {
recommendedProductsNumber = await kameleoonClient.getFeatureVariable(featureKey, variableKey);
} on SDKNotReady {
// Exception indicates that the SDK has not completed its initialization yet.
} on FeatureNotFound {
// The error has occurred; feature flag isn't found in current configuration.
} on FeatureEnvironmentDisabled {
// The feature flag is disabled for the environment.
} on FeatureVariableNotFound {
// Requested variable not defined in Kameleoon.
} on KameleoonException {
// Generic exception in native plugin integration occurred.
} on Exception {
// Any other error.
}
setState(() {
_recommendedProductsNumber = recommendedProductsNumber;
});
Argumentos
| Nombre | Tipo | Descripción |
|---|
| featureKey | String | Clave de la funcionalidad que desea exponer a un usuario. Este campo es obligatorio. |
| variableKey | String | Nombre de la variable cuyo valor desea obtener. Este campo es obligatorio. |
Valor devuelto
| Tipo | Descripción |
|---|
Future<dynamic> | Valor de la variable de la variación registrada para un visitante para este feature flag. Tipos posibles: bool, int, double, String, List, Map |
Excepciones lanzadas
| Tipo | Descripción |
|---|
| SDKNotReady | Excepción que indica que el SDK no ha completado su inicialización. |
| FeatureNotFound | Excepción que indica que el ID de la funcionalidad solicitada no se encontró en la configuración interna del SDK. Esta excepción suele significar que el feature flag no se ha activado en el lado de Kameleoon (pero el código que implementa la funcionalidad ya está desplegado en la aplicación). |
| FeatureEnvironmentDisabled | Excepción que indica que el feature flag está deshabilitado para el entorno actual del visitante (por ejemplo, producción, staging o desarrollo). |
| FeatureVariableNotFound | Excepción que indica que la variable especificada no se ha encontrado. Compruebe que la clave de la variable en la aplicación Kameleoon coincide con la clave de su código. |
| PlatformException | Excepción que indica que la integración del plugin nativo no funciona correctamente. |
getFeatureVariationVariables()
- Utilice
getVariation() en su lugar.
- Este método se llamaba anteriormente
getFeatureAllVariables, eliminado en la versión 4.0.0 del SDK.
Para recuperar todas las variables de una funcionalidad, llame a este método. Puede modificar las variables de su funcionalidad en la aplicación Kameleoon.
Este método toma un parámetro de entrada: featureKey. Devuelve los datos como un tipo Map<String, Object>, según se define en la aplicación Kameleoon. Lanza una excepción (FeatureNotFound) si la funcionalidad solicitada no se ha encontrado en la configuración interna del SDK.
final featureKey = "featureKey";
final variationKey = "variationKey";
try {
final allVariables = await client.getFeatureVariationVariables(featureKey, variationKey);
} on SDKNotReady {
// Exception indicates that the SDK has not completed its initialization yet.
} on FeatureNotFound {
// The error has occurred; feature flag isn't found in current configuration.
} on FeatureEnvironmentDisabled {
// The feature flag is disabled for the environment.
} on KameleoonException {
// Generic exception in native plugin integration occurred.
} on Exception {
// Any other error.
}
Argumentos
| Nombre | Tipo | Descripción |
|---|
| featureKey | String | Clave identificadora de la funcionalidad que desea obtener. Este campo es obligatorio. |
| variationKey | String | La clave de la variación que desea obtener. Este campo es obligatorio. |
Valor devuelto
| Tipo | Descripción |
|---|
Future<Map<String, dynamic>> | Datos asociados a este feature flag. Los valores pueden ser int, double, bool, String, List o Map (según el tipo definido en la interfaz web). |
Excepciones lanzadas
| Tipo | Descripción |
|---|
| FeatureNotFound | Excepción que indica que la funcionalidad solicitada no se ha encontrado en la configuración interna del SDK. Esta excepción suele ser normal y significa que el feature flag no se ha activado en el lado de Kameleoon. |
| FeatureEnvironmentDisabled | Excepción que indica que el feature flag está deshabilitado para el entorno actual del visitante (por ejemplo, producción, staging o desarrollo). |
| FeatureVariationNotFound | Excepción que indica que el ID de la variación solicitada no se ha encontrado en la configuración interna del SDK. Esta excepción suele ser normal y significa que el experimento correspondiente a la variación no se ha activado en el lado de Kameleoon. |
| PlatformException | Excepción que indica que la integración del plugin nativo no funciona correctamente. |