# SDK Flutter

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

Ajoutez Traqio à une app Flutter : le paquet traqio lit l’Install Referrer sur Android, s’enregistre auprès de SKAdNetwork sur iOS et transmet les deep links.

`traqio` est le SDK Traqio pour Flutter : un paquet Dart avec un plugin Android et un plugin iOS. Sur Android, il lit l’**Install Referrer de Google Play** pour une attribution déterministe ; sur iOS, il enregistre les installations auprès de **SKAdNetwork**. Il met les événements en file d’attente dans `shared_preferences`, enregistre les ouvertures de l’app à partir de son cycle de vie et transmet les deep links. Pas de presse-papiers, et aucun identifiant publicitaire — l’option proposée par les SDK iOS, Android et React Native n’y est pas encore.

## Prérequis

- Dart 3, Flutter 3.
- Android 5.0 (API 21) ou ultérieur ; iOS 13 ou ultérieur.

## Mise en place

### Ajoutez le paquet

```bash
flutter pub add traqio
```

Tant que le paquet n’est pas sur pub.dev, référencez par chemin la copie que nous vous envoyons :

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

### Initialisez dans 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` signale l’installation au premier lancement, résout le deep link différé et enregistre l’ouverture de l’app. L’attendre avant `runApp` garantit que l’URL qui a ouvert l’app n’est pas manquée.

### Suivez les événements et définissez l’identifiant utilisateur

```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');
```

Les noms sur lesquels Meta et TikTok peuvent s’optimiser : [Noms d’événements](https://traqio.app/fr/docs/concepts/events-and-revenue#names).

### Déclarez l’endpoint 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();
```

Le plugin transmet les URL de lui-même et ne les consomme jamais : votre routeur les reçoit toujours toutes. Une app iOS sur le cycle de vie UIScene ne reçoit pas les callbacks de l’app delegate qu’écoute le plugin, et transmet elle-même les URL :

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

## Consentement

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

## API

| Appel | Ce qu’il fait |
| --- | --- |
| init(sdkKey:, endpoint:, userId:, deepLinking: true, consent:) | Démarre une seule fois. |
| track(name, value:, currency:) | Met un événement en file d’attente ; lots de 20, retentés avec backoff. |
| setUserId(id) | Associe votre identifiant utilisateur à partir de maintenant. |
| setConsent(granted) | Enregistre durablement le consentement de l’utilisateur au partage publicitaire. |
| onDeepLink(listener) | S’abonne ; renvoie la fonction de désabonnement. |
| getDeferredDeepLink() | Le lien différé de l’installation, ou null. |
| handleUrl(url) | Résout une URL arrivée dans l’app par un autre moyen. |

## Pas encore dans ce SDK

- **Valeurs de conversion iOS et Apple Ads.** Les installations sont enregistrées auprès de SKAdNetwork, mais aucune valeur de conversion n’est définie et aucun jeton Apple Ads n’est transmis.
- **Nouvelles tentatives de l’Install Referrer.** Le referrer est lu une seule fois au premier lancement ; si Google Play ne répond pas, l’installation est signalée comme organique.
- **Identifiants de transaction des achats, revenus publicitaires AdMob, effacement depuis l’app.** Utilisez [RevenueCat](https://traqio.app/fr/docs/integrations/revenuecat) pour les achats et l’[effacement côté serveur](https://traqio.app/fr/docs/concepts/privacy#erasure).

> **Preuves à ce jour** Le code Dart est analysé en CI et la moitié Android a tourné de bout en bout sur un émulateur ; le plugin iOS n’a pas encore été compilé par Traqio. La première app en production sera aussi le premier test complet de ses moitiés natives.

## Questions fréquentes

**Le SDK Flutter définit-il les valeurs de conversion SKAdNetwork ?**
Pas encore. Sur iOS, il enregistre chaque installation auprès de SKAdNetwork, donc les installations issues des réseaux publicitaires sont attribuées via les postbacks d’Apple, mais il ne définit pas les valeurs de conversion à partir de votre mapping : ces postbacks ne portent donc aucun signal de revenu. Les SDK React Native et iOS natif, eux, les définissent.

**Dois-je transmettre les deep links moi-même ?**
En général, non. Le plugin transmet l’intent de lancement et les nouveaux intents sur Android, ainsi que les universal links et les ouvertures d’URL reçus par l’app delegate iOS. Seule une app iOS sur le cycle de vie UIScene passe elle-même les URL à Traqio.handleUrl.
