你可以通过运行一个包含空实验变体的 A/B 测试来衡量流程或付费墙的影响。一个实验变体展示你的流程/付费墙,另一个什么都不显示。你的应用通过读取远程配置中的标志来决定是否渲染。
工作原理
该设置在同一版位中使用两个流程/付费墙:
- 流程/付费墙 A:你想要测试的流程或付费墙,其远程配置中
show_paywall 设置为 true。
- 流程/付费墙 B:一个空的流程或付费墙,其远程配置中
show_paywall 设置为 false。
当 SDK 返回流程或付费墙时,你的应用会读取 show_paywall 标志。如果标志为 true,应用正常渲染;如果为 false,应用跳过渲染,用户无需看到任何内容即可继续。
1. 在远程配置中添加 show_paywall 标志
在同一个版位中需要两个流程或付费墙:流程/付费墙 A(需要测试的那个)和流程/付费墙 B(一个空的)。为每个流程/付费墙在其远程配置中添加一个 show_paywall 字段,这样你的应用就可以用同一个键名对两个实验变体进行分支处理。
为流程/付费墙 A 添加该标志:
-
在 Adapty 主菜单中打开 Flows/Paywalls 部分,选择 Flow/Paywall A。
-
打开 Remote config 部分。
-
创建一个名为 show_paywall、值为 true 的字段。在 JSON 视图中,该条目如下所示:
{
"show_paywall": true
}
-
保存更改。
对 Flow/Paywall B 重复上述步骤,但将 show_paywall 设置为 false。
有关远程配置的完整详情,请参阅使用远程配置自定义流程或使用远程配置设计付费墙。
Tip
在两个实验变体上都设置 show_paywall,可以让两组的代码路径保持一致,也便于后续扩展更多实验变体。
2. 设置 A/B 测试
- 在版位上创建 A/B 测试,并将两个流程/付费墙作为实验变体添加进去。
- 设置实验变体的流量权重,以便在看到流程/付费墙的用户与未看到的用户之间分配流量。
3. 在应用中检查标志
从 SDK 返回的远程配置中读取 show_paywall。如果该标志为 false,则跳过渲染,让用户继续操作。
do {
let flow = try await Adapty.getFlow(placementId: "YOUR_PLACEMENT_ID")
let config = flow.remoteConfigs.first(where: { $0.locale == "en" })
?? flow.remoteConfigs.first
let showPaywall = config?.dictionary?["show_paywall"] as? Bool ?? true
if showPaywall {
// render the flow or paywall
}
} catch {
// handle the error
}
Adapty.getPaywall("YOUR_PLACEMENT_ID") { result ->
when (result) {
is AdaptyResult.Success -> {
val paywall = result.value
val showPaywall = paywall.remoteConfig?.dataMap?.get("show_paywall") as? Boolean ?: true
if (showPaywall) {
// Render the paywall
}
}
is AdaptyResult.Error -> {
// handle the error
}
}
}
try {
const paywall = await adapty.getPaywall({ placementId: "YOUR_PLACEMENT_ID" });
const showPaywall = paywall.remoteConfig?.data?.["show_paywall"] ?? true;
if (showPaywall) {
// Render the paywall
}
} catch (error) {
// handle the error
}
try {
final paywall = await Adapty().getPaywall(id: "YOUR_PLACEMENT_ID");
final bool showPaywall = paywall.remoteConfig?.dictionary?['show_paywall'] as bool? ?? true;
if (showPaywall) {
// Render the paywall
}
} on AdaptyError catch (adaptyError) {
// handle the error
}
Adapty.GetPaywall("YOUR_PLACEMENT_ID", (paywall, error) => {
if (error != null) {
// handle the error
return;
}
var showPaywall = paywall.RemoteConfig?.Dictionary?["show_paywall"] as bool? ?? true;
if (showPaywall) {
// Render the paywall
}
});
Adapty.getPaywall(
placementId = "YOUR_PLACEMENT_ID"
).onSuccess { paywall ->
val showPaywall = paywall.remoteConfig?.dataMap?.get("show_paywall") as? Boolean ?: true
if (showPaywall) {
// Render the paywall
}
}.onError { error ->
// handle the error
}
try {
const paywall = await adapty.getPaywall({ placementId: 'YOUR_PLACEMENT_ID' });
const showPaywall = paywall.remoteConfig?.data?.['show_paywall'] ?? true;
if (showPaywall) {
// Render the paywall
}
} catch (error) {
// handle the error
}
默认值 true 确保在缺少该标志时流程/付费墙仍保持可见,因此不含该标志的现有流程/付费墙不受影响。
下一步