RevenueCat
Si tu app usa RevenueCat, conecta su webhook y Unolink recibe cada prueba, compra, renovación, cancelación y reembolso directamente desde RevenueCat, incluidas las renovaciones y los reembolsos que ocurren cuando la app ni siquiera está abierta. Los ingresos de tu embudo pasan a ser netos de reembolsos. Plan Pro y superiores.
1. Conectar
En Unolink, abre tu app → Ajustes → RevenueCat → Conectar. Copia la URL del webhook y el valor de la cabecera Authorization (se muestra una sola vez).
2. Añadir el webhook en RevenueCat
En RevenueCat, abre tu proyecto → Integrations → Webhooks → Add new configuration:
- Webhook URL y Authorization header value: pégalos.
- Environment: both. Las compras de sandbox cuentan como dispositivos de prueba, así quedan fuera de tus números reales.
- App: esta app. Events: todos.
Guarda y luego pulsa Send test event. La tarjeta de RevenueCat en Unolink lo muestra cuando llega.
3. Dile a Unolink quién es el usuario
Las compras se unen a la instalación (y al enlace del que vino) mediante el ID de usuario que informa tu app: el
propio ID de usuario de app de RevenueCat. Con el SDK 0.3.2 o posterior, una línea lo mantiene al día. Llámala una vez
al iniciar, antes o después de configure:
Unolink.connectRevenueCat { Purchases.isConfigured ? Purchases.shared.appUserID : nil }
Unolink.connectRevenueCat { Purchases.sharedInstance.appUserID }
import Purchases from "react-native-purchases"
Unolink.connectRevenueCat(Purchases)
Unolink.connectRevenueCat(
() => Purchases.appUserID,
addListener: Purchases.addCustomerInfoUpdateListener,
removeListener: Purchases.removeCustomerInfoUpdateListener,
);
Unolink lee el ID al iniciar, cada vez que la app vuelve al primer plano y cada vez que cambia, y solo lo envía cuando
es nuevo. No añade RevenueCat a tu app: eres tú quien le pasa RevenueCat. En iOS y Android, llama también a
Unolink.revenueCatUserChanged() después de Purchases.logIn y Purchases.logOut para enviar el nuevo ID de inmediato
(si no, va con el siguiente evento). React Native y Flutter detectan el cambio por sí solos.
Sin connectRevenueCat (un SDK anterior, o si prefieres hacerlo tú mismo), llama a setUserId con el ID de
RevenueCat después de Purchases.configure, después de cada Purchases.logIn y Purchases.logOut, y en cada inicio.
Usa uno u otro, no los dos:
Unolink.setUserId(Purchases.shared.appUserID)
Unolink.setUserId(Purchases.sharedInstance.appUserID)
Unolink.setUserId(await Purchases.getAppUserID())
Unolink.setUserId(await Purchases.appUserID);
Para un invitado, eso es el ID anónimo de RevenueCat, así que una compra hecha antes de registrarse se une a la instalación de
inmediato. Después de logIn, es el ID de la cuenta. Unolink conserva cada ID que haya informado una instalación, así que la
compra del invitado se mantiene unida.
Si tu app solo informa del ID de la cuenta, la compra de un invitado se sigue uniendo, pero solo con el siguiente evento de RevenueCat para ese cliente que incluya ambos IDs (por ejemplo, la primera renovación). Hasta entonces, la persona aparece como que todavía no ha pagado. Informar del ID de RevenueCat evita esa espera.
Cuando alguien toca «continuar como invitado», llama también a Unolink.signUpSkipped() (SDK 0.3.2 o posterior, React Native 0.3.1;
SDK anteriores: track("sign_up_skipped")), para que el paso Siguió como invitado del embudo los cuente. Consulta
Invitados y cuentas.
Unolink nunca guarda el ID en sí, solo un hash con clave que es distinto para cada una de tus apps. Una compra que llega antes de que la app haya informado de su usuario espera, y se une a la instalación en cuanto lo hace. Los pagos que llegan días o semanas después siguen contando, y el Informe muestra cuánto tarda la gente: consulta Pagos e IDs de usuario, que también trata la privacidad y las reglas de Apple.
Qué llega
| RevenueCat | En Unolink |
|---|---|
INITIAL_PURCHASE (prueba) | Inició la prueba |
INITIAL_PURCHASE, NON_RENEWING_PURCHASE, conversión de la prueba | Pagó, con ingresos |
RENEWAL | Renovó, con ingresos |
CANCELLATION (reembolso) | Reembolsado, ingresos restados |
CANCELLATION, EXPIRATION, BILLING_ISSUE | Canceló la suscripción, Suscripción vencida, Problema de cobro |
Una vez conectado, RevenueCat es la fuente de verdad para las compras y las pruebas: si tu app también llama a
Unolink.purchase() o trialStarted(), esas llamadas se ignoran, así nada se cuenta dos veces. Las renovaciones, las cancelaciones
y lo demás se pueden añadir como pasos en cualquier embudo (Embudo → Editar).