# SDK para Flutter

URL: https://traqio.app/es/docs/sdks/flutter
Last updated: 2026-10-22

Añade Traqio a una app de Flutter: el paquete traqio lee el Play Install Referrer en Android, registra en SKAdNetwork en iOS y reenvía los deep links.

`traqio` es el SDK de Traqio para Flutter: un paquete de Dart con un plugin para Android y otro para iOS. En Android lee el **Install Referrer de Google Play** para una atribución determinista; en iOS registra las instalaciones en **SKAdNetwork**. Pone los eventos en cola en `shared_preferences`, registra las aperturas de la app a partir del ciclo de vida de la app y reenvía los deep links. Sin portapapeles, y sin identificador publicitario — la opción que ofrecen los SDK de iOS, Android y React Native aún no está en este.

## Requisitos

- Dart 3, Flutter 3.
- Android 5.0 (API 21) o posterior; iOS 13 o posterior.

## Configuración

### Añade el paquete

```bash
flutter pub add traqio
```

Hasta que el paquete esté en pub.dev, referencia por ruta la copia que te enviamos:

```yaml
# pubspec.yaml — the package you received, until it is on pub.dev
dependencies:
  traqio:
    path: ../traqio
```

### Inicializa en main()

lib/main.dart:
```dart
import 'package:flutter/widgets.dart';
import 'package:traqio/traqio.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Traqio.init(sdkKey: 'YOUR_SDK_KEY', endpoint: 'https://api.traqio.app');
  runApp(const MyApp());
}
```

`init` informa de la instalación en el primer arranque, resuelve el deep link diferido y registra la apertura de la app. Esperarlo con await antes de `runApp` garantiza que no se pierda la URL que abrió la app.

### Registra eventos y define el id de usuario

```dart
Traqio.setUserId(user.id); // after sign-in — same id as RevenueCat's app_user_id
Traqio.track('signup');
Traqio.track('purchase', value: 9.99, currency: 'EUR');
```

Nombres con los que Meta y TikTok pueden optimizar: [Nombres de eventos](https://traqio.app/es/docs/concepts/events-and-revenue#names).

### Declara el endpoint de SKAdNetwork

ios/Runner/Info.plist:
```xml
<key>NSAdvertisingAttributionReportEndpoint</key>
<string>https://api.traqio.app</string>
```

## Deep links

```dart
final unsubscribe = Traqio.onDeepLink((link) {
  if (link.deepLink != null) router.go(link.deepLink!);
});

// The install's deferred link, or null:
final deferred = await Traqio.getDeferredDeepLink();
```

El plugin reenvía las URL por sí solo y nunca las consume: tu router las sigue recibiendo todas. Una app iOS con el ciclo de vida UIScene no recibe los callbacks del app delegate que escucha el plugin, y reenvía ella misma las URL:

```dart
// iOS apps on the UIScene lifecycle only: forward the URL yourself
Traqio.handleUrl(url.toString());
```

## Consentimiento

```dart
await Traqio.setConsent(granted); // sharing with ad networks, not measurement
```

## API

| Llamada | Qué hace |
| --- | --- |
| init(sdkKey:, endpoint:, userId:, deepLinking: true, consent:) | Arranca una vez. |
| track(name, value:, currency:) | Pone un evento en cola; lotes de 20, reintentados con backoff. |
| setUserId(id) | Asocia tu id de usuario a partir de ahora. |
| setConsent(granted) | Guarda el consentimiento del usuario para compartir con redes publicitarias. |
| onDeepLink(listener) | Se suscribe; devuelve la función para cancelar la suscripción. |
| getDeferredDeepLink() | El enlace diferido de la instalación, o null. |
| handleUrl(url) | Resuelve una URL que llegó a la app por otra vía. |

## Aún no está en este SDK

- **Valores de conversión de iOS y Apple Ads.** Las instalaciones se registran en SKAdNetwork, pero no se define ningún valor de conversión ni se informa de ningún token de Apple Ads.
- **Reintentos del Install Referrer.** El referrer se lee una vez en el primer arranque; si Google Play no responde, la instalación se registra como orgánica.
- **Ids de transacción de compras, ingresos publicitarios de AdMob, borrado desde la app.** Usa [RevenueCat](https://traqio.app/es/docs/integrations/revenuecat) para las compras y el [borrado del lado del servidor](https://traqio.app/es/docs/concepts/privacy#erasure).

> **Pruebas hasta ahora** El código Dart se analiza en CI y la mitad Android se ha ejecutado de principio a fin en un emulador; Traqio aún no ha compilado el plugin de iOS. La primera app en producción es también la primera prueba completa de sus mitades nativas.

## Preguntas frecuentes

**¿El SDK de Flutter define los valores de conversión de SKAdNetwork?**
Todavía no. En iOS registra cada instalación en SKAdNetwork, así que las instalaciones procedentes de redes publicitarias se atribuyen mediante los postbacks de Apple, pero no define los valores de conversión según tu mapeo, así que esos postbacks no llevan ninguna señal de ingresos. Los SDK de React Native e iOS nativo sí los definen.

**¿Tengo que reenviar los deep links yo mismo?**
Normalmente no. El plugin reenvía el intent de arranque y los nuevos intents en Android, y los universal links y las aperturas de URL que recibe el app delegate en iOS. Solo una app iOS con el ciclo de vida UIScene pasa ella misma las URL a Traqio.handleUrl.
