分桶方法decide
分桶方法decide
本主题概述了可用于在云眼灰度发布(特性标帜)AB实验中为用户返回标帜决策的 decide 方法。
使用 Decide 方法返回用户的标帜决策。标帜决策包括标帜启用/禁用状态和标帜变体。
本页介绍以下决策方法:
决定
版本
SDK 3.9 及更高版本
描述
返回用户的标帜键的决策结果。决策结果在 EyeofcloudDecision 对象中返回,并包含传递标帜规则所需的所有数据。
Decide 是 UserContext 对象的一种方法。有关详细信息,请参阅 EyeofcloudUserContext。
有关返回的决策对象的详细信息,请参阅 EyeofcloudDecision 。
参数
下表描述了 Decide 方法的参数:
参数 | 类型 | 描述 |
---|---|---|
FlagKey | 字符串 | 灰度发布(特性标帜)的键 |
Options(可选) | 数组 | Array of EyeofcloudDecideOption enums.请参阅下表。 |
云眼决策选项
下表显示了云眼决策选项的详细信息。除了在 Decide 方法上单独设置这些选项外,还可以在实例化 Eyeofcloud 客户端时将它们设置为全局默认值。请参见初始化软件开发工具包。
Kotlin
// set global default decide options when initializing the client
var options: List<EyeofcloudDecideOption>
options = Arrays.asList(EyeofcloudDecideOption.DISABLE_DECISION_EVENT)
val eyeofcloudManager = EyeofcloudManager.builder()
.withSDKKey("<YOUR_SDK_KEY>")
.withDefaultDecideOptions(options)
.build(context)
// set additional options in a decide call
val eyeofcloudClient = eyeofcloudManager.initialize(context, R.raw.datafile)
val user = eyeofcloudClient.createUserContext("user123")
options = Arrays.asList(EyeofcloudDecideOption DISABLE_DECISION_EVENT,
EyeofcloudDecideOption.DISABLE_DECISION_EVENT)
val decisions = user!!.decideAll(options)
Java
// set global default decide options when initializing the client
List<EyeofcloudDecideOption> options;
options = Arrays.asList(EyeofcloudDecideOption.DISABLE_DECISION_EVENT);
EyeofcloudManager eyeofcloudManager = EyeofcloudManager.builder()
.withSDKKey("<YOUR_SDK_KEY>")
.withDefaultDecideOptions(options)
.build(context);
// set additional options in a decide call
EyeofcloudClient eyeofcloudClient = eyeofcloudManager.initialize(context, R.raw.datafile);
EyeofcloudUserContext user = eyeofcloudClient.createUserContext("user123");
options = Arrays.asList(EyeofcloudDecideOption.DISABLE_DECISION_EVENT,
EyeofcloudDecideOption.DISABLE_DECISION_EVENT);
Map<String, EyeofcloudDecision> decisions = user.decideAll(options);
云眼决策选项枚举 | 如果设置: |
---|---|
EyeofcloudDecideOption.DISABLE_DECISION_EVENT | 防止访问者在仍获得变体的同时触发展示,这将禁止在 Eyeofcloud 应用程序的“结果”页面上显示 Decide 方法的结果。 此设置可能是为什么决策事件调度枚举在返回的 falseEyeofcloudDecision 对象或 DECIDE 通知侦听器有效负载。 |
EyeofcloudDecideOption.ENABLED_FLAGS_ONLY | 仅返回已启用标帜的决策。此选项仅适用于确定多个标帜的方法,如 Decide All 方法。如果此选项无效,则忽略此选项。如果未设置此选项,SDK 将返回所有决策,无论是否启用该标帜。 |
EyeofcloudDecideOption.IGNORE_USER_PROFILE_SERVICE | 设置后,SDK 会绕过 UPS(查找和保存)进行决策。 如果未设置此选项,UPS 将覆盖受众定位、流量分配和实验互斥组。 |
EyeofcloudDecideOption.INCLUDE_REASONS | 在 EyeofcloudDecision 对象的“原因”字段中返回日志消息。请注意,与信息或调试消息不同,无论此设置如何,始终返回严重错误消息。 |
EyeofcloudDecideOption.EXCLUDE_VARIABLES | 从决策结果中排除标记变量值。使用此选项可通过跳过大型 JSON 变量来最小化返回的决策。 |
返回
方法返回一个云眼决策对象。有关更多信息,请参阅云眼决策。
如果该方法遇到严重错误(SDK 未就绪、标帜键无效等),则它会返回带有空变体键字段的决策,并使用错误消息填充“原因”字段(无论“包括原因”选项如何)。
示例决策
下面是调用 Decide 方法并访问返回的 EyeofcloudDecision 对象的示例:
Kotlin
// create the user and decide which flag rule & variation they bucket into
val attributes: MutableMap<String, Any> = HashMap()
attributes["logged_in"] = true
val user = eyeofcloudClient.createUserContext("user123", attributes)
val decision = user!!.decide("product_sort")
// variation. if null, decision fail with a critical error
val variationKey = decision.variationKey
// flag enabled state:
val enabled = decision.enabled
// all variable values
val variables = decision.variables
// String variable value
var vs: String? = null
try {
vs = variables.getValue("sort_method", String::class.java)
} catch (e: JsonParseException) {
e.printStackTrace()
}
// Boolean variable value
val vb = variables.toMap()!!["k_boolean"] as Boolean?
// flag key for which decision was made
val flagKey = decision.flagKey
// user for which the decision was made
val userContext = decision.userContext
// reasons for the decision
val reasons = decision.reasons
Java
// create the user and decide which flag rule & variation they bucket into
Map<String, Object> attributes = new HashMap<>();
attributes.put("logged_in", true);
EyeofcloudUserContext user = eyeofcloudClient.createUserContext("user123", attributes);
EyeofcloudDecision decision = user.decide("product_sort");
// variation. if null, decision fail with a critical error
String variationKey = decision.getVariationKey();
// flag enabled state:
boolean enabled = decision.getEnabled();
// all variable values
EyeofcloudJSON variables = decision.getVariables();
// String variable value
String vs = null;
try {
vs = variables.getValue("sort_method", String.class);
} catch (JsonParseException e) {
e.printStackTrace();
}
// Boolean variable value
Boolean vb = (Boolean) variables.toMap().get("k_boolean");
// flag key for which decision was made
String flagKey = decision.getFlagKey();
// user for which the decision was made
EyeofcloudUserContext userContext = decision.getUserContext();
// reasons for the decision
List<String> reasons = decision.getReasons();
副作用
如果启用了此侦听器,则调用DECISION
通知侦听器。
全部决定
返回用户的所有活动(未存档)标帜的决策。
有关详细信息,请参阅云眼决策。
变体
SDK v3.7 及更高版本
描述
使用“全部决定”方法返回用户的标帜决策映射。
参数
下表描述了“全部决定”方法的参数:
参数 | 类型 | 描述 |
---|---|---|
选项(可选) | 数组 | Array of EyeofcloudDecideOption enums.请参见确定参数。 |
返回
方法返回云眼决策的映射。有关更多信息,请参阅云眼决策。
如果该方法对所有标帜都失败(例如,SDK 未就绪或用户上下文无效),则返回空映射。如果该方法检测到特定标帜的错误,它将在该标帜的决策的“原因”字段中返回错误消息。
例子
下面是使用“全部决定”调用获取用户的标帜的示例:
Kotlin
// make decisions for all active (unarchived) flags in the project for a user
val options = Arrays.asList(EyeofcloudDecideOption.ENABLED_FLAGS_ONLY)
val decisions = user!!.decideAll(options)
val allKeys: Set<String> = decisions.keys
val decisionForFlag1 = decisions["flag_1"]
Java
// make decisions for all active (unarchived) flags in the project for a user
List<EyeofcloudDecideOption> options = Arrays.asList(EyeofcloudDecideOption.ENABLED_FLAGS_ONLY);
Map<String, EyeofcloudDecision> decisions = user.decideAll(options);
Set<String> allKeys = decisions.keySet();
EyeofcloudDecision decisionForFlag1 = decisions.get("flag_1");
副作用
为每个决策调用DECISION
[通知侦听器] doc:set-up-notification-listener-android)(如果启用了此侦听器)。