Testes A/B e feature flags
Crie testes e controle features direto pelo dashboard, sem precisar de novo release.
Testes A/B
No dashboard, vai em Testes A/B → Criar Teste AB. O nome que você dá ao teste gera a chave usada no código (o dashboard mostra essa chave logo abaixo do campo). Escolhe a fase (pré ou pós-paywall), a plataforma, e define de 2 a 4 variantes com seus nomes.
Por exemplo, pra testar se uma barra de progresso no onboarding melhora a conversão, cria um teste "Progress bar" (chave gerada: "progress_bar") com variantes "on" e "off". No código, chama getVariant com essa chave. O SDK retorna em qual variante aquele usuário caiu. Se não caiu em nenhuma, o campo variant vem null (controle).
import { useState, useEffect } from "react";
import Paywallo from "@virex-tech/paywallo-sdk";
function OnboardingScreen() {
const [variant, setVariant] = useState<string | null>(null);
useEffect(() => {
Paywallo.waitUntilReady()
.then(() => Paywallo.getVariant("progress_bar"))
.then((result) => {
setVariant(result.variant);
});
}, []);
if (variant === "on") return <OnboardingWithProgressBar />;
return <OnboardingDefault />;
}Você pode criar até 4 variantes por teste. O dashboard mostra as métricas de conversão por variante e calcula significância estatística automaticamente.
import { useState, useEffect } from "react";
import Paywallo from "@virex-tech/paywallo-sdk";
function OnboardingScreen() {
const [variant, setVariant] = useState<string | null>(null);
useEffect(() => {
Paywallo.waitUntilReady()
.then(() => 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), use getConditionalFlag. Essa configuração ainda não tem tela no dashboard: fale com o time Paywallo pra criar as condições. Se a flag não existir ainda, a chamada retorna false, sem erro.
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 carregar um payload JSON, mas isso também ainda não tem campo no dashboard: peça ao time Paywallo pra configurar o payload de uma variante existente. No React Native e no Swift, o SDK devolve o payload já estruturado. No Kotlin e no Flutter, variant guarda o JSON como texto puro e você decodifica.
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:
// Resolver várias flags de uma vez
const flags = await Paywallo.evaluateFlags(["flag_a", "flag_b", "flag_c"]);O SDK resolve as flags em runtime, a cada chamada de getVariant, evaluateFlags ou getConditionalFlag. Chame waitUntilReady() antes de qualquer uma delas: no cold start o SDK ainda não tem distinctId, e sem ele a chamada devolve o valor de controle em silêncio, enviesando o experimento.
Desenvolvido e mantido por Virex