::: {.row .clearfix}::: {.col-xs-9}云眼配置

云眼About 6 min

::: {.row .clearfix} ::: {.col-xs-9} 云眼配置

::: {.excerpt} ::: {.markdown-body data-testid="RDMD"} 本主题介绍如何使用云眼灰度发布(特性标帜)AB实验Flutter SDK 的 EyeofcloudConfig 访问数据文件中的项目配置数据。 ::: ::: :::

::: {.col-xs-3} [ 建议修改](/experimentation/v4.0.0-full-stack/云眼配置

本主题介绍如何使用云眼灰度发布(特性标帜)AB实验Flutter SDK 的 EyeofcloudConfig 访问数据文件中的项目配置数据。

概述

云眼灰度发布(特性标帜)AB实验 SDK 打开一组定义良好的公共 API,隐藏所有实现详细信息。但是,某些客户端可能需要访问数据文件中的项目配置数据

扩展公共 API 以定义数据模型和访问方法,客户端可以使用这些模型和方法访问项目配置数据。

版本

1.0.0-beta 或更高版本

EyeofcloudConfig API

公共配置数据模型 (EyeofcloudConfig) 是静态 Eyeofcloud 功能实验项目数据的结构化格式。

获取云眼配置

可以使用以下公共 API 调用从 EyeofcloudClient(顶级)访问 EyeofcloudConfig:

Dart

Future<EyeofcloudConfigResponse> getEyeofcloudConfig();

getEyeofcloudConfig 返回一个包含实例,其中包括:EyeofcloudConfigResponse``eyeofcloudConfig

  • 环境键
  • 开发工具包密钥
  • 数据文件修订号
  • 按其键值映射的所有实验
  • 所有属性
  • 所有受众
  • 所有活动
  • 按其键值映射的灰度发布(特性标帜)

📘 注意

当系统更新 SDK 数据文件(客户端可以添加通知侦听器以获得通知)时,客户端应调用该方法获取更新的 EyeofcloudConfig 数据。请参阅以下示例。EYEOFCLOUD_CONFIG_UPDATE

获取数据文件

要在多个 SDK 实例之间共享同一数据文件(例如,在客户端/服务器方案中),可以在实例之间传递配置(数据文件)的 JSON 字符串表示形式。若要获取数据文件,请使用对象的键。有关更多信息,请参阅与多个 SDK 实现共享数据文件EyeofcloudConfig``datafile

对象模型

下面显示了 EyeofcloudConfig 的对象模型:

Dart

// EyeofcloudConfig is an object describing the current project configuration data class EyeofcloudConfig { // This experimentsMap is for experiments of legacy projects only. // For flag projects, experiment keys are not guaranteed to be unique // across multiple flags, so this map may not include all experiments // when keys conflict. Map<String, EyeofcloudExperiment> experimentsMap = {}; Map<String, EyeofcloudFeature> featuresMap = {}; List<EyeofcloudAttribute> attributes = []; List<EyeofcloudEvent> events = []; List<EyeofcloudAudience> audiences = []; String? revision; String? sdkKey; String? environmentKey; String? datafile; } // EyeofcloudFeature is an object describing a feature flag class EyeofcloudFeature { final String? id; final String? key; final List<EyeofcloudExperiment> deliveryRules; final List<EyeofcloudExperiment> experimentRules; } // EyeofcloudExperiment is an object describing an experiment class EyeofcloudExperiment { final String? id; final String? key; final String audiences; final Map<String, EyeofcloudVariation> variationsMap; } // EyeofcloudVariation is an object describing a variation class EyeofcloudVariation { final String? id; final String? key; final bool featureEnabled; final Map<String, EyeofcloudVariable> variablesMap; } // EyeofcloudVariable is an object describing a Variable class EyeofcloudVariable { final String? id; final String? key; final String? type; final String? value; } // EyeofcloudAttribute is an object describing an Attribute class EyeofcloudAttribute { final String? id; final String? key; } // EyeofcloudAudience is an object describing an Audience class EyeofcloudAudience { final String? id; final String? name; final String? conditions; } // EyeofcloudEvent is an object describing an Event class EyeofcloudEvent { final String? id; final String? key; final List<String> experimentIds; }

例子

EyeofcloudConfig可以从EyeofcloudClient(顶级)访问,如下所示:

Dart

var configResponse = await flutterSDK.getEyeofcloudConfig(); var eyeofcloudConfig = configResponse.eyeofcloudConfig!; print("Eyeofcloud [EyeofcloudConfig] revision = ${eyeofcloudConfig.revision}"); print("Eyeofcloud [EyeofcloudConfig] sdkKey = ${eyeofcloudConfig.sdkKey}"); print("Eyeofcloud [EyeofcloudConfig] environmentKey = ${eyeofcloudConfig.environmentKey}"); print("Eyeofcloud [EyeofcloudConfig] attributes = ${eyeofcloudConfig.attributes}"); var attributes = eyeofcloudConfig.attributes; for (var attribute in attributes) { print("Eyeofcloud [EyeofcloudAttribute] -- (id, key) = ${attribute.id}, ${attribute.key}"); } print("Eyeofcloud [EyeofcloudConfig] audiences = ${eyeofcloudConfig.audiences}"); var audiences = eyeofcloudConfig.audiences; for (var audience in audiences) { print("Eyeofcloud [EyeofcloudAudience] -- (id, key, conditions) = ${audience.id}, ${audience.name}, ${audience.conditions.toString()}"); } print("Eyeofcloud [EyeofcloudConfig] events = ${eyeofcloudConfig.events}"); var events = eyeofcloudConfig.events; for (var event in events) { print("Eyeofcloud [EyeofcloudEvent] -- (id, key, experimentIds) = ${event.id}, ${event.key}, ${event.experimentIds.toString()}"); } // all features var featuresMap = eyeofcloudConfig.featuresMap; for (var flagKey in featuresMap.keys) { var flag = featuresMap[flagKey]; var experimentRules = flag?.experimentRules; for (var experiment in experimentRules!) { print("Eyeofcloud [EyeofcloudExperiment] -- Experiment Rule Key: ${experiment.key}"); print("Eyeofcloud [EyeofcloudExperiment] -- Experiment Audiences: ${experiment.audiences}"); var variationsMap = experiment.variationsMap; for (var variationKey in variationsMap.keys) { var variation = variationsMap[variationKey]; print("Eyeofcloud [EyeofcloudVariation] -- variation = { key: ${variationKey}, id: ${variation?.id}, featureEnabled: ${variation?.featureEnabled}"); // use variation data here... var eyeofcloudVariableMap = variation?.variablesMap; for (var variableKey in eyeofcloudVariableMap!.keys) { var variable = eyeofcloudVariableMap[variableKey]; print("Eyeofcloud [EyeofcloudVariable] -- variable = key: ${variableKey}, value: ${variable!.value}"); // use variable data here... } } } var deliveryRules = flag!.deliveryRules; for (var delivery in deliveryRules) { print("Eyeofcloud [EyeofcloudExperiment] -- Delivery Rule Key: ${delivery.key}"); print("Eyeofcloud [EyeofcloudExperiment] -- Delivery Audiences: ${delivery.audiences.toString()}"); } // use experiments and other feature flag data here... } // listen to EYEOFCLOUD_CONFIG_UPDATE to get updated data flutterSDK.addUpdateConfigNotificationListener((msg) { var newConfig = flutterSDK.getEyeofcloudConfig(); });

Updated 2 months ago


[

Track Event

](/experimentation/v4.0.0-full-stack/docs/track-event-flutter)[

EyeofcloudDecision

](/experimentation/v4.0.0-full-stack/docs/eyeofclouddecision-flutter)

Did this page help you?

Yes

No

创建用户上下文

介绍创建用户上下文方法,该方法为云眼灰度发布(特性标帜)AB实验中的标帜决策和事件创建用户上下文。

此方法的目的是创建用户并设置用户上下文一次,因此不必在每次做出标帜决策或跟踪事件时都指定用户。可以定义多个用户上下文。系统将用户上下文作为运行时对象返回,否则不会持久化。

版本

1.0.0-beta 或更高版本

描述

此调用为标帜决策和事件创建用户上下文。可以在 Eyeofcloud 客户端实例上成功调用此方法,甚至在完全配置实例之前也是如此。

参数

下表列出了必需参数和可选参数:

参数

类型

描述

(必选)用户 ID

字符串

用户的 ID。

属性
可选

Map

自定义键值字符串对的映射,指定系统用户用于受众群体定位的用户的属性。有关更多详细信息,请参阅以下部分。

受众群体属性

为用户设置自定义受众群体属性,可以使用这些属性来定位受众群体。可以将字符串、数字、布尔值和 nil 作为自定义用户属性值传递。如果要根据他们使用的应用程序变体定位访问群体,还可以传入格式为语义变体的open in new window字符串,然后在 Eyeofcloud 应用中定义受众条件。version

🚧 重要

在访问群体评估期间,如果没有为给定的访问群体条件传递有效的属性值(例如,如果在受众群体条件需要布尔值时传递字符串,或者忘记传递值),则系统会跳过该条件。发生这种情况时,SDK 日志会包含警告。

返回

返回一个 EyeofcloudUserContext 对象。有关详细信息,请参阅云眼用户上下文

Dart

// option 1: create a user, then set attributes var user = await flutterSDK.createUserContext("user123"); var attributes = <String, dynamic>{}; attributes["is_logged_in"] = false; attributes["app_version"] = "1.3.2"; user!.setAttributes(attributes); // option 2: pass attributes when creating the user var attributes = <String, dynamic>{}; attributes["is_logged_in"] = false; attributes["app_version"] = "1.3.2"; var eyeofcloudUserContext = await eyeofcloudClient.createUserContext("user123", attributes);

参见

云眼用户上下文

源文件

包含 Flutter SDK for Android Eyeofcloudopen in new window 和 Swift 实现的语言/平台源文件.java为 EyeofcloudClient.swiftopen in new window

Last update:
Contributors: “zhangweixue”