强制决策方法
强制决策方法
这些方法将通过强制用户进入特定变体来帮助测试和调试客户端应用程序的各种流。
React Native SDK 将在做出任何决定之前检查强制决策。如果找到请求标帜的匹配项,SDK 会在做出正常决策之前立即返回强制决策(忽略受众条件和流量分配)。
下面描述了 React Native SDK 将遵循的特定场景:
标记到决策
- SDK 将在给定标帜的任何决策调用开始时查找。如果为该标帜找到匹配的标帜到决策强制决策,它将返回该决定。
从实验规则到决策
- SDK 将在决策开始时查找给定实验规则(标帜键)。如果为标帜找到匹配的实验规则到决策强制决策,它将返回决策。
从交付规则到决策
- SDK 将在决策开始时查找给定的传递规则(标帜键)。如果找到匹配的传递规则到决策强制决策,它将返回该决策。
❗️
警告
在调用任何强制决策方法之前,必须将变体关联到标帜规则。
在强制决策时,React Native SDK 将像其他正常决策一样触发展示事件和通知(除非被 disableDecisionEvent 选项禁用)。
📘 注意
这些强制决策不是永久性的,将在更新用户时清除。
有关每种方法的更多信息,请单击下面的方法名称:
如果在初始化后立即调用强制决策方法,请确保等待用户使用onUserUpdate
promise 准备就绪。
React
const eyeofcloud = createInstance({
sdkKey: '<Your_SDK_Key>',
});
eyeofcloud.onUserUpdate(() => {
eyeofcloud.setForcedDecision(
{
flagKey: "product_sort",
ruleKey: "experiment",
},
{ variationKey: "treatment" }
);
});
云眼分桶结果 EyeofcloudDecision上下文
React
export interface EyeofcloudDecisionContext {
flagKey: string;
ruleKey?: string;
}
云眼强制决策
React
export interface EyeofcloudForcedDecision {
variationKey: string;
}
设置强制决策方法- setForcedDecision()
版本
2.8.0
描述
为给定的EyeofcloudDecisionContext
设置强制决策 (variationKey
)。
参数
下表列出了 React Native SDK 的必需参数和可选参数。
参数 | 类型 | 描述 |
---|---|---|
决策所需的上下文 | 接口 | EyeofcloudDecisionContext 的实例,其中包含要获取的强制决策的必需flagKey 和可选ruleKey 。 |
(必选)决定 | 接口 | EyeofcloudForcedDecision 的实例,其中包含要设置的强制variationKey 决策所需的实例。 |
返回
一个布尔值,指示是否成功完成了强制决策 (variationKey
) 的设置。
例
React
eyeofcloud.setForcedDecision( {
flagKey: "product_sort",
ruleKey: "experiment",
}, { variationKey: "treatment" } );
获取强制决策方法 - getForcedDecision()
变体
2.8.0
描述
返回给定EyeofcloudDecisionContext
的强制决策 (variationKey
)。返回 EyeofcloudForcedDecision 实例,如果没有匹配项,则返回 null。
参数
下表列出了 React Native SDK 的必需参数和可选参数。
参数 | 类型 | 描述 |
---|---|---|
决策所需的上下文 | 接口 | EyeofcloudDecisionContext 的实例,其中包含要获取的强制决策的必需flagKey 和可选ruleKey 。 |
返回
上下文的强制决策EyeofcloudForcedDecision
实例,如果没有匹配项,则为 null。
例
React
var forcedDecision = eyeofcloud.getForcedDecision({
flagKey: "product_sort",
ruleKey: "experiment",
});
删除强制决策方法 - 删除强制决策()
变体
2.8.0
描述
删除给定EyeofcloudDecisionContext
的强制决策(variationKey
)。
参数
下表列出了 React Native SDK 的必需参数和可选参数。
参数 | 类型 | 描述 |
---|---|---|
决策所需的上下文 | 接口 | EyeofcloudDecisionContext 的实例,其中包含要获取的强制决策的必需flagKey 和可选ruleKey 。 |
返回
删除强制决策 (variationKey
) 时的成功/失败布尔状态。
例
React
var success = eyeofcloud.removeForcedDecision({
flagKey: "product_sort",
ruleKey: "experiment",
})
删除所有强制决策方法 - 删除所有强制决策()
变体
2.8.0
描述
删除用户上下文的所有强制决策 (variationKey
)。
参数
下表列出了 React Native SDK 的必需参数和可选参数。
参数 | 类型 | 描述 |
---|---|---|
没有 | 不适用 | 不适用 |
返回
成功/失败布尔状态。
例
React
var success = eyeofcloud.removeAllForcedDecisions();
完整代码示例
React
import React from "react";
import {
createInstance,
EyeofcloudProvider,
useDecision,
withEyeofcloud,
} from "@eyeofcloud/react-sdk";
const eyeofcloud = createInstance({
sdkKey: "<YOUR_SDK_KEY_HERE>",
});
eyeofcloud.onUserUpdate(() => {
// Wait for the user to be available before using forced decision methods.
eyeofcloud.setForcedDecision({ flagKey: "product_sort" }, { variationKey: "treatment" });
});
const PurchaseButton = withEyeofcloud((props: any) => {
const handleClick = () => {
const { eyeofcloud } = props;
eyeofcloud.track("purchased");
};
return <div><button onClick={handleClick}>Purchase</button></div>;
});
const RemoveForcedDecision = withEyeofcloud((props: any) => {
const handleClick = () => {
{ eyeofcloud } = props;
eyeofcloud.removeForcedDecision({ flagKey: 'product_sort' });
};
return <div><button onClick={handleClick}>Remove Forced Decision</button></div>;
});
const RemoveAllForcedDecisions = withEyeofcloud((props: any) => {
const handleClick = () => {
const { eyeofcloud } = props;
eyeofcloud.removeAllForcedDecisions();
};
return <div><button onClick={handleClick}>Remove All Forced Decisions</button></div>;
});
function ProductSort() {
const [decision] = useDecision("product_sort", {
autoUpdate: true
});
const variationKey = decision.variationKey;
const isEnabled = decision.enabled;
const sortMethod = decision.variables["sort_method"];
return (
<div>
{/* If variation is null, display error */}
{variationKey === null && <div className="error">{decision.reasons}</div>}
{/* If feature is enabled, do something with the Sort Method variable */}
{isEnabled && <div>The Sort method is {sortMethod}</div>}
{/* Show relevant component based on the variation key */}
{variationKey === "control" && <div>Control Component</div>}
{variationKey === "treatment" && <div>Treatment Component</div>}
{/* Show Purchase Button to track Purchase event */}
<PurchaseButton />
<RemoveForcedDecision />
<RemoveAllForcedDecisions />
</div>
);
}
function App() {
return (
<EyeofcloudProvider
eyeofcloud={eyeofcloud}
user={{
id: "user123",
}}
>
<ProductSort />
</EyeofcloudProvider>
);
}
export default App;