---
title: "Añadir variantes de prueba A/B sin paywalls"
description: "Ejecuta una prueba A/B donde una variante omite el paywall, usando una bandera de Remote Config para controlar si el paywall se muestra."
---

Puedes medir el impacto de tu paywall ejecutando una prueba A/B contra una variante vacía. Una variante muestra tu paywall; la otra no muestra nada. Tu app lee una bandera del Remote Config del paywall para decidir si renderizarlo.

## Cómo funciona \{#how-it-works\}

La configuración usa dos paywalls en el mismo placement:

- **Paywall A**: El paywall que quieres probar, con `show_paywall` establecido en `true` en su Remote Config.
- **Paywall B**: Un paywall vacío con `show_paywall` establecido en `false` en su Remote Config.

Cuando `getPaywall` devuelve un paywall, tu app lee la bandera `show_paywall`. Si la bandera es `true`, la app renderiza el paywall. Si la bandera es `false`, la app omite el renderizado y el usuario continúa sin ver un paywall.

## 1. Añade la bandera show_paywall en el Remote Config \{#1-add-the-show_paywall-flag-in-remote-config\}

Necesitas dos paywalls en el mismo placement: el Paywall A (el que quieres probar) y el Paywall B (un paywall vacío). Añade un campo `show_paywall` a cada uno para que tu app pueda ramificarse usando la misma clave en ambas variantes.

Para añadir la bandera al Paywall A:

1. Abre la sección [**Paywalls**](https://app.adapty.io/paywalls) en el menú principal de Adapty y selecciona el Paywall A.
2. Cambia a la pestaña **Remote config**.
3. En la vista **Table**, haz clic en **Add row** y crea un campo con el nombre `show_paywall` y el valor `true`. En la vista **JSON**, la entrada tiene este aspecto:

   ```json showLineNumbers
   {
     "show_paywall": true
   }
   ```

4. Guarda los cambios.

Repite los mismos pasos para el Paywall B, pero establece `show_paywall` en `false`.

Para más detalles sobre el Remote Config, consulta [Diseña un paywall con Remote Config](customize-paywall-with-remote-config).

:::tip
Establecer `show_paywall` en ambas variantes hace que la ruta de código sea idéntica para los dos grupos y facilita ampliar el test con más variantes más adelante.
:::

## 2. Configura la prueba A/B \{#2-set-up-the-ab-test\}

1. [Crea una prueba A/B](run_stop_ab_tests) en el placement y añade ambos paywalls como variantes.
2. Establece los pesos de las variantes para distribuir el tráfico entre los usuarios que ven el paywall y los que no.

## 3. Comprueba la bandera en tu app \{#3-check-the-flag-in-your-app\}

Lee `show_paywall` del Remote Config del paywall devuelto por `getPaywall`. Si la bandera es `false`, omite el renderizado y deja que el usuario continúe.

<Tabs groupId="current-os" queryString>
<TabItem value="swift" label="iOS" default>

```swift showLineNumbers
do {
    let paywall = try await Adapty.getPaywall(placementId: "YOUR_PLACEMENT_ID")
    let showPaywall = paywall.remoteConfig?.dictionary?["show_paywall"] as? Bool ?? true

    if showPaywall {
        // Render the paywall
    }
} catch {
    // handle the error
}
```

</TabItem>

<TabItem value="kotlin" label="Android">

```kotlin showLineNumbers
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
        }
    }
}
```

</TabItem>

<TabItem value="react-native" label="React Native">

```typescript showLineNumbers
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
}
```

</TabItem>

<TabItem value="flutter" label="Flutter">

```dart showLineNumbers
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
}
```

</TabItem>

<TabItem value="unity" label="Unity">

```csharp showLineNumbers
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
    }
});
```

</TabItem>

<TabItem value="kmp" label="Kotlin Multiplatform">

```kotlin showLineNumbers
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
}
```

</TabItem>

<TabItem value="capacitor" label="Capacitor">

```typescript showLineNumbers

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
}
```

</TabItem>
</Tabs>

El valor de respaldo `true` mantiene el paywall visible cuando falta la bandera, por lo que los paywalls existentes que no tienen el campo no se ven afectados.

:::important
Si renderizas el paywall tú mismo (sin el [Paywall Builder](adapty-paywall-builder)), llama a [`logShowPaywall`](present-remote-config-paywalls#track-paywall-view-events) cuando muestres el Paywall A. Sin esto, Adapty no puede contabilizar las visualizaciones del paywall en el test. No registres una visualización para el Paywall B, ya que nunca se muestra.
:::

## Próximos pasos \{#next-steps\}

- [Crear, ejecutar y detener una prueba A/B](run_stop_ab_tests) — Configura el test que incluye ambas variantes
- [Resultados y métricas de la prueba A/B](results-and-metrics) — Compara la variante sin paywall con tu paywall