Testes A/B e feature flags

Crie testes e controle features direto pelo dashboard, sem precisar de novo release.

Testes A/B

Por exemplo, pra testar se uma barra de progresso no onboarding melhora a conversão, cria um teste "progress_bar" com variantes "on" e "off". No código, chama getVariant com o nome do teste. O SDK retorna qual variante aquele usuário caiu. Se não caiu em nenhuma, retorna null (controle).

tsx
import { useState, useEffect } from "react";
import Paywallo from "@virex-tech/paywallo-sdk";

function OnboardingScreen() {
  const [variant, setVariant] = useState<string | null>(null);

  useEffect(() => {
    Paywallo.getVariant("progress_bar").then((result) => {
      setVariant(result.variant);
    });
  }, []);

  if (variant === "on") return <OnboardingWithProgressBar />;
  return <OnboardingDefault />;
}

Você pode criar quantas variantes quiser. O dashboard mostra as métricas de conversão por variante e calcula significância estatística automaticamente.

tsx
import { useState, useEffect } from "react";
import Paywallo from "@virex-tech/paywallo-sdk";

function OnboardingScreen() {
  const [variant, setVariant] = useState<string | null>(null);

  useEffect(() => {
    Paywallo.getVariant("onboarding_flow").then((result) => {
      setVariant(result.variant);
    });
  }, []);

  // use switch, if/else ou qualquer padrão que preferir
  switch (variant) {
    case "curto":
      return <ShortOnboarding />;
    case "video":
      return <VideoOnboarding />;
    default:
      return <LongOnboarding />;
  }
}

Feature flags

Pra liberar uma feature pra um grupo específico de usuários (por plataforma, versão do app ou país), cria uma flag condicional no dashboard e checa no código.

tsx
const enabled = await Paywallo.getConditionalFlag("beta_checkout", {
  platform: Platform.OS,
  appVersion: Application.nativeApplicationVersion,
  country: "BR",
});

if (enabled) {
  // mostra nova feature
}

Remote config

Cada variante pode ter um payload JSON configurado no dashboard. Útil pra mudar valores no app sem publicar nova versão.

tsx
const { payload } = await Paywallo.getVariant("pricing_config");
// payload = { trialDays: 7, primaryPrice: 9.99, ctaText: "Começar grátis" }

Múltiplas flags e pré-carregamento

Pra resolver várias flags de uma vez:

tsx
// Resolver várias flags de uma vez
const flags = await Paywallo.evaluateFlags(["flag_a", "flag_b", "flag_c"]);

Se precisa que as flags estejam prontas no boot do app sem await, declara em sessionFlags no Provider. Depois do init, acessa com getSessionFlag de forma síncrona.

tsx
// Pré-carregar no boot pra acesso síncrono depois
<PaywalloProvider config={{
  appKey: "pk_xxx",
  sessionFlags: ["progress_bar", "paywall_variant"]
}}>