SDK
SDK para React Native
Añade Traqio a una app React Native sin Expo: activa Expo Modules, instala @traqio/react-native, inicializa antes de registrar la app, configura iOS y Android.
@traqio/react-native es el SDK de Traqio para React Native. Incluye un módulo nativo con autolinking (Kotlin y Swift) y reexporta el motor JavaScript, @traqio/core, así que tu app lo importa todo desde un único paquete. Es el SDK verificado de principio a fin en un dispositivo: un clic, una instalación desde Google Play, el referrer leído en el primer arranque, una instalación atribuida de forma determinista. Para una app de Expo, sigue la página de Expo.
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#
- React Native 0.74 o posterior.
- Expo Modules en el proyecto (
npx install-expo-modules@latest): la mitad nativa es un módulo de Expo. - iOS 15.1 o posterior. Android no necesita ningún permiso (salvo que actives el identificador publicitario).
Configuración#
Activa Expo Modules#
npx install-expo-modules@latestUna vez por proyecto. Sáltatelo si tu app ya usa algún módulo de Expo.
Instala el paquete#
npm install @traqio/react-native @react-native-async-storage/async-storage cd ios && pod installAsyncStorage es lo que hace que la instalación se envíe exactamente una vez y conserva los eventos en cola entre reinicios; el SDK lo detecta por sí solo cuando está instalado. Sin él, el SDK muestra una advertencia y vuelve a informar de la instalación en cada arranque.
Inicializa antes de registrar la app#
// index.js — before AppRegistry.registerComponent import { Traqio, getNativeBridge } from "@traqio/react-native"; import { version } from "./package.json"; Traqio.init({ sdkKey: "YOUR_SDK_KEY", endpoint: "https://api.traqio.app", native: getNativeBridge(), appVersion: version, });Inicializar antes de
AppRegistry.registerComponentsignifica que el SDK ya está escuchando cuando se entrega la URL que abrió la app. La llamada es idempotente.Declara el endpoint de SKAdNetwork#
<key>NSAdvertisingAttributionReportEndpoint</key> <string>https://api.traqio.app</string>iOS envía entonces a Traqio una copia de cada postback de SKAdNetwork de tu app. Solo el origen: iOS añade su propia ruta.
Registra eventos y define el id de usuario#
Traqio.setUserId(user.id); // after sign-in — same id as RevenueCat's app_user_id Traqio.track("purchase", { value: 9.99, currency: "EUR", transactionId: purchase.transactionId });Consulta Eventos e ingresos para conocer los nombres con los que Meta y TikTok pueden optimizar, y por qué importa
transactionId.
Deep links#
El SDK escucha él mismo el Linking de React Native (la URL inicial y todas las posteriores) y pasa los enlaces de Traqio a tu callback:
Traqio.onDeepLink(({ deepLink }) => {
if (deepLink) navigation.navigate(...routeFor(deepLink)); // your router's call
});Los enlaces solo abren la app si la app declara tu dominio de marca:
<!-- android/app/src/main/AndroidManifest.xml, inside the main <activity> -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="go.example.com" android:pathPrefix="/c/" />
</intent-filter>En iOS, añade applinks:go.example.com en Signing & Capabilities → Associated Domains, y deja que React Native reciba los universal links como de costumbre:
// AppDelegate — hand universal links to React Native's Linking, as usual
- (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> *))restorationHandler {
return [RCTLinkingManager application:application
continueUserActivity:userActivity
restorationHandler:restorationHandler];
}El dominio en sí se configura en la consola; consulta Deep linking.
Notas por plataforma#
Android#
- El módulo declara la entrada
<queries>que le permite ver Google Play en Android 11+; no hace falta ningún cambio en el manifest para la atribución. - Si Google Play no responde en el primer arranque, la instalación se retiene y se reintenta en los siguientes arranques (hasta tres) en lugar de informarse como orgánica.
iOS#
- El SDK no necesita ni muestra ningún aviso de App Tracking Transparency.
- Los valores de conversión siguen el mapeo que publicas en la consola. Si tu app ya gestiona su propio esquema de valores de conversión, desactiva el del SDK con
skan: false: dos escritores se pelearían por los mismos seis bits.
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.
API completa
Preguntas frecuentes#
- ¿Por qué una app de React Native sin Expo necesita Expo Modules?
- La mitad nativa del SDK (el lector del Install Referrer en Android, el gestor de SKAdNetwork en iOS) está escrita como un módulo de Expo, así que necesita el pequeño runtime de Expo Modules que install-expo-modules añade a un proyecto bare. No convierte la app en una app gestionada por Expo ni añade ningún servicio de Expo.
- ¿Tengo que vaciar la cola de eventos o informar de las aperturas de la app yo mismo?
- No. En React Native el SDK escucha AppState: envía la cola cuando la app pasa a segundo plano y registra una apertura de la app cuando vuelve tras 30 minutos o más. Los entornos sin el AppState de React Native, como Capacitor, llaman ellos mismos a flush() y appOpened().