Traqio.

SDK

SDK para Expo

Añade Traqio a una app de Expo: instala @traqio/expo, compila un cliente de desarrollo, inicializa al arrancar y configura SKAdNetwork y deep links.

El SDK de Traqio para Expo es @traqio/expo, un alias de @traqio/react-native: un único paquete que contiene un módulo nativo de Expo (Kotlin y Swift) y el motor JavaScript compartido. En Android lee el Install Referrer de Google Play (la prueba determinista de qué enlace generó la instalación) y en iOS registra la instalación en SKAdNetwork, define los valores de conversión según tu mapeo e informa del token de atribución de Apple Ads. No lee ni el IDFA ni el GAID salvo que lo actives.

Disponible en npm

Paquete @traqio/react-native · versión 0.1.0Nivel de prueba: Verificado de extremo a extremo en un dispositivo: clic → install referrer → instalación atribuida.

Requisitos#

  • Expo SDK 51 o posterior, React Native 0.74 o posterior.
  • Una development build o EAS Build, no Expo Go, que no puede cargar un módulo nativo de terceros.
  • iOS 15.1 o posterior (el deployment target del módulo). Android no necesita ningún permiso (salvo que actives el identificador publicitario).

Configuración#

  1. Instala el paquete#

    npx expo install @traqio/expo @react-native-async-storage/async-storage

    @react-native-async-storage/async-storage es lo que permite al SDK recordar que la instalación ya se informó y conservar los eventos en cola entre reinicios. Sin él, el SDK muestra una advertencia al arrancar y vuelve a informar de la instalación en cada inicio.

  2. Compila un cliente de desarrollo#

    npx expo prebuild --clean
    npx expo run:android   # or: npx expo run:ios — a development build, not Expo Go

    El prebuild genera los proyectos android/ e ios/ con el módulo de Traqio enlazado. En EAS, un eas build normal hace lo mismo.

  3. Inicializa al arrancar#

    // app/_layout.tsx — once, at module level, before the first screen renders
    import { Traqio, getNativeBridge } from "@traqio/expo";
    import Constants from "expo-constants";
    
    Traqio.init({
      sdkKey: "YOUR_SDK_KEY",
      endpoint: "https://api.traqio.app",
      native: getNativeBridge(), // Install Referrer on Android, SKAdNetwork + Apple Ads on iOS
      appVersion: Constants.expoConfig?.version,
    });

    Llámalo una vez, a nivel de módulo, para que se ejecute antes de la primera pantalla; no dentro de un componente, donde un nuevo renderizado lo volvería a llamar (es idempotente, pero una llamada tardía pierde el enlace que abrió la app). getNativeBridge() devuelve undefined donde el módulo nativo no está (Expo Go, web, tests): el SDK sigue enviando eventos, pero no puede atribuir.

  4. Configura app.json#

    Dos ajustes nativos viven en app.json, y el prebuild los escribe en los proyectos nativos:

    app.json
    {
      "expo": {
        "plugins": [["@traqio/expo", { "domains": ["go.example.com"] }]],
        "ios": {
          "infoPlist": {
            "NSAdvertisingAttributionReportEndpoint": "https://api.traqio.app"
          }
        }
      }
    }
    • NSAdvertisingAttributionReportEndpoint indica a iOS que envíe a Traqio una copia de los postbacks de SKAdNetwork de tu app. El valor es solo el origen: iOS añade su propia ruta.
    • El plugin @traqio/expo hace que los enlaces de tu dominio de marca abran la app: añade applinks:go.example.com a ios.associatedDomains y un intent filter autoVerify para https://go.example.com/c/ a android.intentFilters. Sustituye go.example.com por tu propio dominio de seguimiento; pon varios si tienes varios. Con EAS Build, Associated Domains se activa después en tu App ID automáticamente; el resto, incluidas las huellas de Android, está en Universal links en 2 minutos.
  5. Registra eventos y define el id de usuario#

    // after sign-in — the SAME id you give RevenueCat (Purchases.logIn)
    Traqio.setUserId(user.id);
    Traqio.track("signup");
    
    Traqio.track("purchase", {
      value: 9.99,
      currency: "EUR",
      transactionId: purchase.transactionId, // the store's id: StoreKit transactionId, Play orderId
    });

    Usa los nombres de eventos que Traqio asigna a los eventos estándar de Meta y TikTok; consulta Nombres de eventos. Pasa el transactionId de la tienda en cada compra: con él, una compra que informan tanto tu app como RevenueCat se cuenta una sola vez.

Un único callback recibe tanto el enlace que abrió la app ya instalada como el enlace que llevó a una instalación nueva. El SDK conecta el Linking de React Native: no hay nada más que reenviar.

import { router } from "expo-router";

// Direct opens AND the deferred link of a fresh install, one callback.
Traqio.onDeepLink(({ deepLink }) => {
  if (deepLink) router.push(deepLink); // "/product/42"
});

Un enlace que se resuelve antes de que se monte la pantalla que contiene este callback se conserva y se entrega al suscribirse, así que un arranque en frío no lo pierde.

Notas por plataforma#

Android#

  • El módulo declara una entrada <queries> para Play Store. Sin ella, Android 11+ oculta Google Play a las apps que no instaló, y el referrer aparece como ausente en las development builds.
  • Cuando Google Play no está disponible momentáneamente en el primer arranque, el SDK no informa de la instalación como orgánica: reintenta en los siguientes arranques (hasta tres) antes de informarla sin referrer.

iOS#

  • El SDK nunca muestra el aviso de App Tracking Transparency y no lo necesita: SKAdNetwork y el token de Apple Ads funcionan sin él.
  • Los valores de conversión siguen el mapeo que publicas en la consola; publícalo antes de tu primera campaña en iOS. Consulta Atribución en iOS.

Identificador publicitario (opcional)#

Desactivado por defecto: el SDK no envía ni IDFA ni GAID. Activa collectAdvertisingId solo si compras en redes que atribuyen por el identificador publicitario — Unity Ads y AppLovin vinculan su clic con tu instalación gracias a él. Se envía con la instalación y nunca se usa como su identidad.

Traqio.init({
  sdkKey: "YOUR_SDK_KEY",
  endpoint: "https://api.traqio.app",
  native: getNativeBridge(),
  collectAdvertisingId: true, // off by default
});
  • iOS: el SDK nunca muestra el aviso de App Tracking Transparency — pídelo tú antes de init y enlaza AdSupport. El IDFA solo se lee si el usuario ya permitió el seguimiento.
  • Android: añade com.google.android.gms:play-services-ads-identifier y el permisocom.google.android.gms.permission.AD_ID a tu app; el SDK no declara ninguno de los dos.
  • Declara el identificador publicitario en los detalles de privacidad de la App Store y en el formulario de Seguridad de los datos de Google Play.

Configuración y API#

Todas las opciones de init y todos los métodos (setConsent, forgetMe, trackAdRevenue, getInstallReferrer) se documentan una sola vez, en la referencia de la API de JavaScript. Las opciones que con más probabilidad definirás:

OpciónValor por defectoQué hace
userId—Tu id de usuario: el mismo valor que el app_user_id de RevenueCat.
consentno se envíaLa respuesta del usuario a tu solicitud de consentimiento, si se conoce al arrancar.
skantrueGestiona los valores de conversión de SKAdNetwork a partir de los ingresos registrados (iOS).
appleAdstrueInforma del token de atribución de Apple Ads (iOS 14.3+).
deepLinkingtrueResuelve los deep links directos y diferidos.
testAdsfalseUnidades de anuncios de prueba de AdMob: las impresiones se registran, nunca se cuentan como ingresos.
collectAdvertisingIdfalseEnvía el IDFA / GAID con la instalación — ver Identificador publicitario.

Preguntas frecuentes#

¿El SDK de Traqio funciona en Expo Go?
No. El SDK incluye un módulo nativo (lee el Install Referrer de Google Play en Android y gestiona SKAdNetwork en iOS), y Expo Go solo contiene los módulos nativos que distribuye Expo. Usa una development build (npx expo run:android / run:ios) o EAS Build. En Expo Go la parte JavaScript sigue enviando eventos, pero sin el módulo nativo no hay atribución.
¿Qué diferencia hay entre @traqio/expo y @traqio/react-native?
Ninguna en su comportamiento: @traqio/expo es un alias que reexporta @traqio/react-native, fijado a una versión exacta, para que el SDK pueda encontrarse con el nombre de Expo. Instala uno de los dos, nunca ambos: dos copias ejecutarían dos colas de eventos y contarían cada instalación dos veces.
¿Necesito un config plugin?
No para el SDK: el autolinking de Expo enlaza el módulo nativo durante el prebuild. Para los deep links, @traqio/expo incluye un config plugin opcional — ["@traqio/expo", { "domains": ["go.example.com"] }] en app.json añade la entrada de Associated Domains en iOS y el intent filter de App Links en Android para tu dominio de marca, sin duplicar lo que ya declaras. El endpoint de SKAdNetwork sigue en ios.infoPlist.

Actualizado el 26 de octubre de 2026