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
@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#
Instala el paquete#
npx expo install @traqio/expo @react-native-async-storage/async-storage@react-native-async-storage/async-storagees 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.Compila un cliente de desarrollo#
npx expo prebuild --clean npx expo run:android # or: npx expo run:ios — a development build, not Expo GoEl prebuild genera los proyectos
android/eios/con el módulo de Traqio enlazado. En EAS, uneas buildnormal hace lo mismo.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()devuelveundefineddonde el módulo nativo no está (Expo Go, web, tests): el SDK sigue enviando eventos, pero no puede atribuir.Configura app.json#
Dos ajustes nativos viven en
app.json, y el prebuild los escribe en los proyectos nativos:{ "expo": { "plugins": [["@traqio/expo", { "domains": ["go.example.com"] }]], "ios": { "infoPlist": { "NSAdvertisingAttributionReportEndpoint": "https://api.traqio.app" } } } }NSAdvertisingAttributionReportEndpointindica 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/expohace que los enlaces de tu dominio de marca abran la app: añadeapplinks:go.example.comaios.associatedDomainsy un intent filterautoVerifyparahttps://go.example.com/c/aandroid.intentFilters. Sustituyego.example.compor 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.
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
transactionIdde la tienda en cada compra: con él, una compra que informan tanto tu app como RevenueCat se cuenta una sola vez.
Deep links con Expo Router#
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
inity enlaza AdSupport. El IDFA solo se lee si el usuario ya permitió el seguimiento. - Android: añade
com.google.android.gms:play-services-ads-identifiery el permisocom.google.android.gms.permission.AD_IDa 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ón | Valor por defecto | Qué hace |
|---|---|---|
userId | — | Tu id de usuario: el mismo valor que el app_user_id de RevenueCat. |
consent | no se envía | La respuesta del usuario a tu solicitud de consentimiento, si se conoce al arrancar. |
skan | true | Gestiona los valores de conversión de SKAdNetwork a partir de los ingresos registrados (iOS). |
appleAds | true | Informa del token de atribución de Apple Ads (iOS 14.3+). |
deepLinking | true | Resuelve los deep links directos y diferidos. |
testAds | false | Unidades de anuncios de prueba de AdMob: las impresiones se registran, nunca se cuentan como ingresos. |
collectAdvertisingId | false | Enví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.