实现用户配置文件服务 UserProfileService

云眼About 5 min

实现用户配置文件服务 UserProfileService

本主题介绍如何设置自定义用户配置文件服务或如何使用云眼灰度发布(特性标帜)AB实验 PHP SDK 的默认值。

使用用户配置文件服务保留有关用户的信息,并确保变体分配具有粘性。例如,如果正在处理后端网站,则可以创建一个从 Redis 或 Memcached 存储读取和保存用户配置文件的实现。

在 PHP SDK 中,没有默认实现。实施用户配置文件服务是可选的,仅当希望保持变体分配的粘性时,即使实验条件在运行过程中发生了变化(例如,受众群体、属性、变体暂停和流量分配),才需要实现该服务。否则,PHP 开发工具包是无状态的,并依赖于确定性分桶来返回一致的分配。

如果用户配置文件服务未按预期对用户进行分桶,请检查其他灰度发布(特性标帜)是否覆盖了分桶。有关更多信息,请参阅 分桶的工作原理

实现服务

请参阅下面的代码示例以提供您自己的用户配置文件服务。它应公开两个具有以下签名的函数:

  • lookup :获取用户 ID 字符串并返回与以下架构匹配的用户配置文件。
  • save :获取用户配置文件并保留它。

如果要将用户配置文件服务纯粹用于跟踪目的而不是粘性分桶,则只能实现该方法(始终从 返回)。save``nil``lookup

.PHP

use Eyeofcloud\Logger\DefaultLogger; use Eyeofcloud\UserProfile\UserProfileServiceInterface; use Eyeofcloud\Eyeofcloud; class UserProfileService implements UserProfileServiceInterface { public function lookup($userId) { // perform user profile lookup } public function save($userProfileMap) { // persist user profile } } $eyeofcloudClient = new Eyeofcloud( $datafile, null, new DefaultLogger(), null, false, new UserProfileService() );

下面的代码示例显示了用户配置文件对象的 JSON 架构。

用于覆盖默认分桶行为,并为给定用户定义备用实验变体。对于要覆盖的每个实验,向Map添加一个对象。使用实验 ID 作为键,并包含一个指定所需变体的属性。如果没有实验条目,则默认分桶行为仍然存在。experiment_bucket_map``variation_id

在下面的示例中,是实验 ID。^[a-zA-Z0-9]+$

JSON

{ "title": "UserProfile", "type": "object", "properties": { "user_id": {"type": "string"}, "experiment_bucket_map": {"type": "object", "patternProperties": { "^[a-zA-Z0-9]+$": {"type": "object", "properties": {"variation_id": {"type":"string"}}, "required": ["variation_id"]} } } }, "required": ["user_id", "experiment_bucket_map"] }

The PHP SDK uses the User Profile Service you provide to override Eyeofcloud灰度发布(特性标帜)'s default bucketing behavior in cases when an experiment assignment has been saved.

When implementing your own User Profile Service, we recommend loading the user profiles into the User Profile Service on initialization and avoiding performing expensive, blocking lookups on the lookup function to minimize the performance impact of incorporating the service.

When implementing in a multi-server or stateless environment, we suggest using this interface with a backend like Cassandraopen in new window or Redisopen in new window. You can decide how long you want to keep your sticky bucketing around by configuring these services.

Updated 2 months ago


[

EyeofcloudDecision

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

Configure event dispatcher

](/experimentation/v4.0.0-full-stack/docs/configure-event-dispatcher-php)

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”