功能实验的实时区段Android SDK 的区段资格方法
功能实验的实时区段Android SDK 的区段资格方法
使用 Real-Time Segments for Feature Experimentation 区段方法获取用户的外部受众映射。您可以使用用户上下文的用户标识符来获取用户细分。
先决条件
在获取符合条件的区段并检查用户是否符合给定受众区段的条件之前,您必须启用 Real-Time Segments for Feature Experimentation 集成。
fetchQualifiedSegments
最低 SDK 版本
4.0.0
描述
您可以使用fetchQualifiedSegments
方法从 ODP 服务器检索特定用户的外部受众映射。Eyeofcloud Feature Experimentation Android SDK 提供了fetchQualifiedSegments
方法的同步和异步版本。将缓存符合条件的区段。
- 在同步提取完成之前,调用方将被阻止。
- 异步 API 的调用者不会被阻止。
fetchQualfiedSegments
是UserContext
对象的一个方法。有关详细信息,请参阅 EyeofcloudUserContext。
参数
fetchQualifiedSegments
方法的参数说明如下表所示:
参数 | 类型 | 描述 |
---|---|---|
options (可选) | 字符串 | 用于获取合格区段的一组选项。 |
完成(用于异步调用) | 回调函数 | 要使用 fetch 结果调用的完成处理程序。 |
返回 – 同步调用
如果更新了用户上下文中的 qualified segments 数组,则 fetchQualifiedSegments
synchronous 方法返回true
。
Returns (返回) – 异步调用
- 如果获取成功完成,Android SDK 将更新 EyeofcloudUserContext中的限定区段数组,然后调用状态为 success 的完成处理程序。
- 如果 fetch 失败,SDK 将调用状态为 failure 的处理程序。
📘
注意
您可以直接读取和写入 qualified segments 数组。这使您可以绕过 Eyeofcloud Data Platform (ODP) 的远程提取过程或使用您自己的提取服务。这在测试或调试时可能很有帮助。
示例 fetchQualifiedSegments
以下是调用fetchQualifiedSegments
方法并访问返回的 completion 对象的示例。
Kotlin 示例
val attributes: MutableMap<String, Any> = HashMap()
attributes.put("app_version", "1.3.2")
val user = eyeofcloudClient.createUserContext("user123", attributes)
// Without segment option
user!!.fetchQualifiedSegments { isFetchSuccessful: Boolean? ->
println(isFetchSuccessful)
val decision = user.decide("flag1")
user.trackEvent("purchase_event")
}
// With segment options
val odpSegmentOptions: MutableList<ODPSegmentOption> = ArrayList()
odpSegmentOptions.add(ODPSegmentOption.IGNORE_CACHE)
odpSegmentOptions.add(ODPSegmentOption.RESET_CACHE)
user.fetchQualifiedSegments(
{ isFetchSuccessful: Boolean? ->
println(isFetchSuccessful)
val decision = user.decide("flag1")
user.trackEvent("purchase_event")
},
odpSegmentOptions
)
val attributes: MutableMap<String, Any> = HashMap()
attributes.put("app_version", "1.3.2")
// Method 1 create with user id
val userWithUserId = eyeofcloudClient.createUserContext("user123", attributes)
// Without segment option
val response = userWithUserId!!.fetchQualifiedSegments()
// With segment options
val odpSegmentOptions: MutableList<ODPSegmentOption> = ArrayList()
odpSegmentOptions.add(ODPSegmentOption.IGNORE_CACHE)
odpSegmentOptions.add(ODPSegmentOption.RESET_CACHE)
val response = userWithUserId!!.fetchQualifiedSegments(odpSegmentOptions)
val decision = userWithUserId!!.decide("flag1")
userWithUserId!!.trackEvent("myevent")
// Method 2 create EyeofcloudUserContext with auto-generated VUID instead of user id
val userWithVuid = eyeofcloudClient.createUserContext(attributes)
// Without segment option
val response = userWithVuid!!.fetchQualifiedSegments()
// With segment option
val response = userWithVuid!!.fetchQualifiedSegments()
val odpSegmentOptions: MutableList<ODPSegmentOption> = ArrayList()
odpSegmentOptions.add(ODPSegmentOption.IGNORE_CACHE)
odpSegmentOptions.add(ODPSegmentOption.RESET_CACHE)
val response = userWithVuid.fetchQualifiedSegments(odpSegmentOptions)
val decision = userWithVuid.decide("flag1")
userWithVuid.trackEvent("myevent")
Android 示例
Map<String, Object> attributes = new HashMap<>();
attributes.put("app_version", 1.3.2");
EyeofcloudUserContext user = eyeofcloudClient.createUserContext("user123", attributes);
// Without segment option
Boolean response = user.fetchQualifiedSegments((Boolean isFetchSuccessful) -> {
System.out.println(isFetchSuccessful);
EyeofcloudDecision decision = user.decide("flag1");
user.trackEvent("purchase_event");
});
// With segment options
List<ODPSegmentOption> odpSegmentOptions = new ArrayList<>();
odpSegmentOptions.add(ODPSegmentOption.IGNORE_CACHE);
odpSegmentOptions.add(ODPSegmentOption.RESET_CACHE);
user.fetchQualifiedSegments((Boolean isFetchSuccessful) -> {
System.out.println(isFetchSuccessful);
EyeofcloudDecision decision = user.decide("flag1");
user.trackEvent("purchase_event");
},
odpSegmentOptions);
Map<String, Object> attributes = new HashMap<>();
attributes.put("app_version", "1.3.2");
// Method 1 create with user id
EyeofcloudUserContext userWithUserId = eyeofcloudClient.createUserContext("user123", attributes);
// Without segment option
Boolean response = userWithUserId.fetchQualifiedSegments();
// With segment options
List<ODPSegmentOption> odpSegmentOptions = new ArrayList<>();
odpSegmentOptions.add(ODPSegmentOption.IGNORE_CACHE);
odpSegmentOptions.add(ODPSegmentOption.RESET_CACHE);
Boolean response = userWithUserId.fetchQualifiedSegments(odpSegmentOptions);
EyeofcloudDecision decision = userWithUserId.decide("flag1");
userWithUserId.trackEvent("myevent");
// Method 2 create EyeofcloudUserContext with auto-generated VUID instead of user id
EyeofcloudUserContext userWithVuid = eyeofcloudClient.createUserContext(attributes);
// Without segment option
Boolean response = userWithVuid.fetchQualifiedSegments();
// With segment options
List<ODPSegmentOption> odpSegmentOptions = new ArrayList<>();
odpSegmentOptions.add(ODPSegmentOption.IGNORE_CACHE);
odpSegmentOptions.add(ODPSegmentOption.RESET_CACHE);
Boolean response = userWithVuid.fetchQualifiedSegments(odpSegmentOptions);
EyeofcloudDecision decision = userWithVuid.decide("flag1");
userWithVuid.trackEvent("myevent");
下图显示了在调用fetchQualifiedSegments
时应用程序、Android SDK 和 Eyeofcloud Data Platform (ODP) 服务器之间的网络调用:
- 调用
fetchQualifiedSegments
方法。 - Android SDK 对 ODP 进行 GraphQL 调用以获取区段。
- ODP 使用区段进行响应。
- 将缓存将用户 ID 映射到区段的已获取区段。请参阅 OdpSegmentManager。
- 为用户返回适当的变体。
OdpSegmentManager
获取区段时,会缓存这些区段。这意味着,如果同一用户再次请求区段(创建新用户上下文时),则可以从缓存中检索受众区段信息,而不是从远程 ODP 服务器获取。
缓存用于调用fetchQualifiedSegment
。此方法在用户上下文上调用(用户上下文是固定的,包括用户有资格使用的实时区段)。
缓存_仅在_调用fetchQualifiedSegments
时适用。如果将缓存超时设置为 0,则禁用缓存。Eyeofcloud 使用 LRU 算法,因此当达到最大大小时,最早的记录会被撞出。如果在方法调用时出现缓存未命中,则 Eyeofcloud 会发出网络请求。
Android SDK 有一个OdpSegmentManager
模块,该模块管理为所有用户上下文共享的区段缓存。缓存在内存中(非持久缓存),因此在应用程序终止或设备重新启动时重置缓存。
有关缓存的具体信息:
- 存储用户 ID 到区段的映射。
- Android SDK 在缓存未命中或过期时调用 ODP 服务器。
- 使用最近最少使用 (LRU)。
- 超时时过期。
- 缓存大小和超时都是可配置的(提供默认值)。
- 默认启用,也可以禁用。
如果您想绕过缓存,可以将以下选项添加到您的odpSegmentOptions
数组中:
- ignoreCache – 绕过分段缓存以进行查找和保存。
- resetCache – 重置所有分段缓存。
请参阅“With segment options”注释下的 Kotlin 和 Android 代码示例,了解如何使用缓存选项进行调用fetchQualifiedSegments
。
isQualifiedFor
最低 SDK 版本
4.0.0
描述
检查用户是否符合给定受众细分的条件。
参数
isQualifiedFor
方法的参数说明如下表所示:
参数 | 类型 | 描述 |
---|---|---|
段 | 字符串 | 要检查用户是否符合条件的受众区段名称。 |
返回
true
如果用户是合格的。
例子
以下是用户是否符合区段条件的示例:
val attributes: MutableMap<String, Any> = HashMap()
attributes.put("mobile_os", "ios")
val user: EyeofcloudUserContext = eyeofcloud.createUserContext("user123", attributes)
val response = user.fetchQualifiedSegments()
val isQualified = user.isQualifiedFor("segment1")
Map<String, Object> attributes = new HashMap<>();
attributes.put("mobile_os", "ios");
EyeofcloudUserContext user = eyeofcloud.createUserContext("user123", attributes);
Boolean response = user.fetchQualifiedSegments();
Boolean isQualified = user.isQualifiedFor("segment1");