Saltar al contenido

Guía · React Native y Expo

Añade un programa de afiliados o de referidos a tu app de React Native.

@influto/react-native-sdk funciona en Expo gestionado y en React Native puro, en iOS y Android. Te dice qué creador refirió una instalación, acepta códigos de referido escritos a mano y verifica cada compra a través de RevenueCat o directamente con Apple y Google.

Actualizado: 1 de noviembre de 2026

En resumen

Instala @influto/react-native-sdk y @react-native-async-storage/async-storage, llama a InfluTo.initialize una sola vez en la raíz de la app y después a checkAttribution e identifyUser. Con RevenueCat, ese es todo el código: si react-native-purchases está instalado, el SDK escribe el atributo influto_code en el suscriptor y el webhook de RevenueCat hace el resto. Sin RevenueCat, instala expo-iap o react-native-iap y el SDK captura por sí mismo las compras de la tienda. Expo no necesita config plugin. Calcula una tarde de trabajo.

Qué hace el SDK en una app de React Native

Un solo paquete cubre iOS, Android y todos los flujos de Expo. Hace tres cosas:

  • Encuentra al creador detrás de una instalación. checkAttribution responde una vez por instalación. Un código escrito es una coincidencia exacta; si no, la coincidencia por clic en el enlace conecta la instalación con un toque reciente en el enlace del creador, dentro de las 72 horas. Sin IDFA y sin aviso de ATT.

  • Acepta códigos de referido escritos. applyCode, o el campo ya hecho ReferralCodeInput, cubre las menciones en podcasts y vídeos, donde nadie toca un enlace.

  • Conecta las compras con el referido. Con RevenueCat, etiqueta al suscriptor; directo con la tienda, envía la compra firmada por la tienda para que InfluTo la verifique con Apple o Google. La comisión solo existe después de esa comprobación.

Paso 1: instala el paquete

Añade el SDK y AsyncStorage, que guarda el estado local del SDK. AsyncStorage es un módulo nativo, así que debe estar en las dependencias de tu propia app para que funcione el autolinking. En React Native puro, ejecuta después pod install en ios/.

En Expo no hay nada más que añadir ni config plugin: el SDK es JavaScript puro sobre AsyncStorage, así que funciona en Expo Go, en development builds y en builds de producción. Requiere React Native 0.60+ y React 16.8+.

npm install @influto/react-native-sdk
# AsyncStorage is a native module — install it in the app too
npm install @react-native-async-storage/async-storage

Paso 2: inicializa una vez y comprueba la atribución

Llama a initialize una sola vez, lo antes posible, y espera a que termine antes de hacer nada más. Lanza un error si falla (clave incorrecta, sin red): captúralo, regístralo y sigue; el próximo inicio lo intentará de nuevo.

checkAttribution indica si la instalación fue referida y con qué código. Se decide una sola vez por instalación, se guarda en el dispositivo y falla sin romper nada: un error de red devuelve attributed: false. Úsalo para dar la bienvenida a los usuarios referidos o mostrar la oferta que anunció su creador.

La clave de API (it_…, en Setup & SDK) sirve para desarrollo y producción. No la dejes en el código que subes al repositorio; por ejemplo, guárdala en un .env ignorado por git y léela con las variables EXPO_PUBLIC_ de Expo. Un App.tsx típico en una app con RevenueCat, en orden:

import { useEffect } from 'react';
import Purchases from 'react-native-purchases';
import InfluTo from '@influto/react-native-sdk';

export default function App() {
  useEffect(() => {
    (async () => {
      Purchases.configure({ apiKey: REVENUECAT_API_KEY }); // RevenueCat apps: configure it first
      try {
        await InfluTo.initialize({
          apiKey: process.env.EXPO_PUBLIC_INFLUTO_API_KEY!,
          appVersion: '1.4.0',
          debug: __DEV__,
        });
      } catch (error) {
        console.warn('InfluTo initialize failed', error); // retried on the next launch
        return;
      }
      const attribution = await InfluTo.checkAttribution();
      await InfluTo.identifyUser(await Purchases.getAppUserID());
    })();
  }, []);
  // …
}

Paso 3: añade un campo para el código de referido

Muchos referidos llegan con un código dicho en voz alta, no con un toque en un enlace. applyCode(code) valida el código y lo aplica si es válido; los códigos se recortan y se pasan a mayúsculas por ti. Un código no válido devuelve valid: false con un error_code como CODE_NOT_FOUND o CODE_EXPIRED.

O usa directamente ReferralCodeInput de @influto/react-native-sdk/ui. Rellena el código si la instalación viene de un enlace, admite tus colores, fuentes y etiquetas traducidas, y solo muestra el nombre del creador si tú lo activas.

// Validate, then apply a code the user typed
const result = await InfluTo.applyCode('FITGURU30');
if (result.valid && result.applied) {
  // Unlock the offer
}

// Or drop in the ready-made UI:
import { ReferralCodeInput } from '@influto/react-native-sdk/ui';
<ReferralCodeInput onApplied={(result) => {/* ... */}} />

Paso 4: conecta las compras, con RevenueCat o directo con la tienda

InfluTo paga comisión solo por compras verificadas con la tienda. Elige una única vía por plataforma; iOS puede ir directo con la tienda mientras Android sigue con RevenueCat.

  • RevenueCat: no hay nada que conectar en el código. Con react-native-purchases instalado, el SDK define influto_code e influto_referral en el suscriptor cuando encuentra un referido o se aplica un código. Después conecta el webhook en Setup & SDK, de forma automática con una clave secreta v2 de RevenueCat o a mano.

  • Directo con la tienda: instala expo-iap o react-native-iap, añade tus credenciales de App Store y Google Play en Settings → Validation y cambia la plataforma a directo con la tienda. Entonces initialize captura las compras nuevas y recupera las existentes, y cada una se envía una sola vez. Define autoCapture: false si prefieres llamar tú mismo a reportPurchase.

La trampa con RevenueCat: el atributo se escribe una sola vez, cuando se encuentra el referido, y la escritura se omite si RevenueCat aún no está configurado. Configura Purchases, luego initialize, luego checkAttribution, y llama a identifyUser con el app user ID de RevenueCat como respaldo.

La trampa en el modo directo con la tienda: indica los productos de pago único de Android en oneTimeProductIds y repórtalos tú mismo con precio y moneda si tu librería de compras no expone el precio; si no, se registran a 0 $. Lo que el SDK detecta por su cuenta:

PaqueteQué hace el SDK con él
react-native-purchasesDefine los atributos de RevenueCat influto_code e influto_referral cuando se encuentra un referido o se aplica un código
expo-iap o react-native-iapCaptura las compras de la tienda en apps que van directas con la tienda (si están instaladas ambas, se usa expo-iap)
react-native-device-infoAñade la marca y el modelo del dispositivo al seguimiento de instalaciones

Notas sobre Expo y React Native

La mayoría de los problemas de integración en React Native vienen del montaje y del orden de las llamadas:

  • Expo Go sirve, las librerías de la tienda no. Expo Go ejecuta el SDK de InfluTo, pero expo-iap, react-native-iap y RevenueCat contienen código nativo, así que haz las compras de prueba en un development build. La captura automática simplemente no hace nada en Expo Go, y eso no tiene riesgo.

  • Inicializa una vez, en la raíz. No en una pantalla que se monta varias veces. Llama a identifyUser una vez por inicio de sesión, no desde el renderizado.

  • AsyncStorage en tu propio package.json. Si no, su módulo nativo no se enlaza y el SDK no puede guardar su estado.

Paso 5: pruébalo antes de invitar a creadores

Las compras en sandbox nunca mueven dinero ni cambian tus estadísticas, así que puedes repetir la prueba las veces que quieras:

  1. 1

    Confirma que el SDK se conectó. Tras el primer initialize correcto, Setup & SDK muestra “SDK connected” con la plataforma y la versión del SDK; con debug: __DEV__ se registra cada paso.

  2. 2

    Simula una compra. Simulate a purchase en Setup & SDK envía una compra de prueba en sandbox por el flujo real de InfluTo. Introduce uno de tus códigos para ver cómo se resuelve; nunca completa un paso de la configuración.

  3. 3

    Instala desde el enlace de un creador. Únete a tu campaña con una segunda cuenta de creador, abre su enlace de referido en un dispositivo de prueba, instala tu development build y ábrela. Escribir el código es la prueba más fiable.

  4. 4

    Haz una compra en sandbox. Compra con un tester de sandbox o de TestFlight, o con un license tester de Google Play. El Integration log, cambiado a Sandbox, muestra la compra atribuida a tu código.

clearAttribution() restablece el dispositivo para otra prueba.

O deja que lo haga tu agente de programación

¿Trabajas con Claude Code, Codex o Cursor? Conecta el servidor MCP de InfluTo y pídele la integración: el agente asocia “expo” con este SDK, escribe los pasos anteriores y comprueba influto_integration_status hasta que llega una compra sandbox con su atribución.

SDK de afiliados para React Native: preguntas y respuestas.

¿Hay un SDK de afiliados para React Native?

Sí. @influto/react-native-sdk es un paquete npm con licencia MIT (código en github.com/influto/influto-react-native) que añade a iOS y Android, desde un único código base, la detección de instalaciones referidas, los códigos de referido y la atribución de compras. Requiere React Native 0.60+ y @react-native-async-storage/async-storage.

¿Puedo tener un programa de referidos en una app de Expo?

Sí, tanto en Expo managed como en bare, sin config plugin. El SDK funciona en Expo Go, en development builds y en builds de producción. La captura de compras directas desde las tiendas usa expo-iap o react-native-iap, que necesitan un development build en lugar de Expo Go.

¿Necesito RevenueCat?

No. Con RevenueCat (react-native-purchases), el SDK etiqueta al suscriptor e InfluTo lee el webhook de RevenueCat. Sin RevenueCat, InfluTo verifica cada compra directamente con la App Store Server API o Google Play. Usa exactamente una vía por plataforma.

¿Cómo introducen los usuarios un código de referido?

Llama a applyCode(code) desde tu propio campo o usa ReferralCodeInput de @influto/react-native-sdk/ui. Los códigos se recortan y se pasan a mayúsculas, un código escrito tiene prioridad sobre la coincidencia por clic en el enlace, y los códigos escritos no están limitados por la ventana de 72 horas.

¿Cuánto cuesta?

0 $ al mes. Por cada compra verificada pagas la comisión que fijes más el 10 % de esos mismos ingresos (7 %, 5 % o 3 % con volumen). El monedero prepago empieza en 50 $ y es reembolsable. InfluTo paga a los creadores cada mes con Stripe Connect en 33 países, cuando han ganado 20 $.

Lanza códigos de referido en tu próxima versión.

Un paquete npm, una vía de validación, un depósito reembolsable. 0 $ al mes; el 10 % solo sobre los ingresos que aportan los creadores.

Empieza gratis