分桶方法decide

云眼About 5 min

分桶方法decide

本主题概述了可用于在云眼全栈中为用户返回标帜决策的 decide 方法。

使用 Decide 方法返回用户的标帜决策。标帜决策包括标帜启用/禁用状态和标帜变体。

本页介绍以下决策方法:

决定

版本

SDK 3.7 及更高版本

描述

返回用户的标帜键的决策结果。决策结果在 EyeofcloudDecision 对象中返回,并包含传递标帜规则所需的所有数据。

Decide 是 UserContext 对象的一种方法。有关详细信息,请参阅 EyeofcloudUserContext

有关返回的决策对象的详细信息,请参阅 EyeofcloudDecision

参数

下表描述了 Decide 方法的参数:

参数类型描述
Flagkey字符串灰度发布(特性标帜)的键
选项(可选)数组Array of EyeofcloudDecideOption enums.请参阅下表。

云眼决策选项

下面的示例演示如何在任何 Decide 方法上单独设置选项,或在实例化 Eyeofcloud 客户端时将其设置为全局默认值。请参见初始化软件开发工具包

Swift

# set global default decide options when initializing the client 
let eyeofcloud = EyeofcloudClient(sdkKey: sdkKey, defaultDecideOptions: [.disableDecisionEvent])  

# set additional options in a decide call 
let user = eyeofcloud.createUserContext(userId: "user123") 
let decisions = user.decideAll(options: [.enabledFlagsOnly, .disableDecisionEvent])

下表显示了云眼决策选项的详细信息。

云眼决策选项枚举如果设置:
EyeofcloudDecideOption.disableDecisionEvent防止访问者在仍收到变体的同时触发展示open in new window,从而禁止在“结果”页面上open in new window显示 Decide 方法的结果。 此设置可能是为什么决策事件调度枚举在返回的 falseEyeofcloudDecisionopen in new window 对象或 DECIDE 通知侦听器有效负载。
EyeofcloudDecideOption.enabledFlagsOnly仅返回已启用标帜的决策。此选项仅适用于确定多个标帜的方法,如 Decide All 方法。如果此选项无效,则忽略此选项。如果未设置此选项,SDK 将返回所有决策,无论是否启用该标帜。
EyeofcloudDecideOption.ignoreUserProfileService设置后,SDK 会绕过用户配置文件服务 (UPS)(查找和保存)进行决策。如果未设置此选项,UPS 将覆盖受众定位、流量分配和实验互斥组。
EyeofcloudDecideOption.includeReasons在 EyeofcloudDecision 对象的 Reasons 字段中返回日志消息。请注意,与信息或调试消息不同,无论此设置如何,始终返回严重错误消息。
EyeofcloudDecideOption.excludeVariables从决策结果中排除标志变量值。使用此选项可通过跳过大型 JSON 变量来最大程度地减少返回的决策。

返回

Decide 方法返回一个 EyeofcloudDecision 对象。

如果该方法遇到严重错误(SDK 未就绪、标志键无效等),则它将返回一个包含空变体键字段的决策,并使用错误消息填充“原因”字段(无论“包含原因”选项如何)。

示例决策

下面是调用 Decide 方法并访问返回的 EyeofcloudDecision 对象的示例:

Swift

// create the user and decide which flag rule & variation they bucket into  
let user = eyeofcloudClient.createUserContext(userId: "user123", attributes: ["logged_in": true]) 
let decision = user.decide(key: "product_sort")  

// Did the decision fail with a critical error? 
guard let variationKey = decision.variationKey else {   
    print("[decide] error: \(decision.reasons)")     
    return 
}  

// flag enabled state: 
let enabled: Bool = decision.enabled  

// String variable value: 
let value1: String? = decision.variables.getValue(jsonPath: "sort_method") 
// or: 
let value2: String? = decision.variables.toMap()["sort_method"] as? String  

// all variable values 
let allVarValues: EyeofcloudJSON = decision.variables  

// variation. if null, decision fail with a critical error 
let variationKey: String = decision.variationKey  

// flag decision reasons 
let reasons: [String] = decision.reasons  

// user for which the decision was made 
let userContext: EyeofcloudUserContext = decision.userContext

副作用

如果启用了DECISION通知侦听器,则调用此侦听器。

所有决策

返回用户的所有活动(未存档)标志的决策。

版本

SDK v3.6 或更高

描述

使用 Decide All 方法可返回用户的标志决策映射。

参数

下表描述了 Decide All 方法的参数:

参数类型描述
options (optional)数组EyeofcloudDecideOption 枚举的数组。

返回

方法返回云眼决策的映射。有关更多信息,请参阅云眼决策

如果该方法对所有标帜都失败(例如,SDK 未就绪或用户上下文无效),则返回空映射。如果该方法检测到特定标帜的错误,它将在该标帜的决策的“原因”字段中返回错误消息。

例子

下面是使用“全部决定”调用获取用户的标帜的示例:

Swift

// make decisions for all active (unarchived) flags in the project for a user 
let decisions = user.decideAll() 
// or only for enabled flags 
let decisions = user.decideAll(options: [.enabledFlagsOnly])  

let flagKeys = decisions.keys 
let flagDecisions = decisions.values 
let decisionForFlag1 = decisions["flag_1"]

副作用

如果启用了此侦听器,则为每个决策调用DECISION通知侦听器

决定指定的键

在 Swift SDK 中,如果传递 keys 参数,则 Decide 方法将返回特定标帜键的标帜决策映射。

变体

SDK v3.6 及更高版本

描述

获取特定标帜键的标帜决策图。请注意,在 SDK 中,如果 Decide 方法不是多态的,因此不能接受keys参数,则有一个 Decide For Keys 方法来实现本部分所述的功能。

参数

下表描述了 Decide 方法的参数:

参数类型描述
键(Key)数组字符串标帜键数组。
选项(可选)数组EyeofcloudDecideOption 枚举的数组。

返回

返回云眼决策的映射。有关更多信息,请参阅云眼决策

如果该方法对所有标帜都失败(例如,SDK 未就绪或用户上下文无效),则返回空映射。如果该方法检测到特定标帜的错误,它将在该标帜的决策的“原因”字段中返回错误消息。

以下是获取用户指定标帜的示例:

Swift

// make a decisions for specific enabled  flags 
let decisions = user.decide(keys: ["flag_1", "flag_2"], options: [.enabledOnly])  

let decisionForFlag1 = decisions["flag_1"] 
let decisionForFlag2 = decisions["flag_2"]

副作用

如果启用了此侦听器,则为每个决策调用DECISION通知侦听器

源文件

包含 Swift 实现的语言/平台源文件是 EyeofcloudClient.swiftopen in new window

Last update:
Contributors: zhangweixue,“zhangweixue”