Traqio.

Concepts

Deep linking : direct et différé

Ouvrir l’app sur le bon écran depuis un lien Traqio : directement si elle est installée, après l’installation sinon. Domaines, fichiers d’association, callback.

Un deep link ouvre une app sur un écran précis plutôt que sur son accueil. Un lien de tracking Traqio porte une destination optionnelle — un chemin dans l’app comme /product/42, ou une URL d’app comme myapp://product/42 — et le SDK la transmet à votre app à deux moments, via un seul callback :

QuandComment Traqio le résout
Directl’app est installée et un lien l’ouvrele SDK envoie l’URL ; Traqio renvoie la destination de ce lien et enregistre le clic
Différéle lien a été touché avant l’installationau premier lancement de la nouvelle installation, le SDK demande une fois où ce lien voulait mener

Deep links directs#

iOS (universal links) et Android (App Links) n’ouvrent une app à la place du navigateur que pour un domaine que l’app déclare, et qui déclare l’app en retour via un fichier sur le domaine. Les deep links directs demandent donc votre propre domaine de tracking :

  1. Configurez le domaine de tracking de l’app dans la console (Paramètres de l’app → Domaine de tracking).
  2. Dans les réglages Liens de votre app, renseignez votre Apple Team ID et votre bundle ID, ainsi que les empreintes SHA-256 de votre certificat de signature Android (Play Console → Intégrité de l’app → Signature d’app — ajoutez aussi celle de la clé d’importation si vous testez hors de Google Play).
  3. Traqio sert /.well-known/apple-app-site-association et /.well-known/assetlinks.json sur votre domaine, construits à partir de cette identité.
  4. Déclarez le domaine dans l’app — la console affiche les deux extraits avec vos valeurs :
iOS — Signing & Capabilities → Associated Domains
applinks:go.example.com
Android — AndroidManifest.xml
<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>

Quand le système ouvre l’app, il n’a jamais chargé le lien : le SDK envoie donc l’URL à Traqio, qui enregistre le clic qu’il aurait sinon manqué et répond avec la destination. Seules les URL de la forme https://<host>/c/<code> quittent l’appareil ; les URL propres à votre app sont ignorées sans requête. Un lien n’est résolu que pour l’app à laquelle il appartient, sur le domaine de cette app.

Un domaine par app

Un domaine de tracking appartient à une seule app : ses fichiers d’association ne déclarent qu’elle, et elle revendique tous les liens /c/ du domaine — pas de sélecteur, pas d’app qui ouvre le lien d’une autre. Deux apps (deux marques) d’un même espace de travail configurent deux domaines, par exemple go.marque-a.com et go.marque-b.com.

Universal links en 2 minutes#

Traqio sert lui-même les fichiers d’association — apple-app-site-association etassetlinks.json, sur votre domaine personnalisé, construits à partir de l’identité saisie dans la console. Vous n’hébergez rien. Il reste à déclarer le domaine dans l’app, par l’un des trois chemins suivants.

L’attribution n’a besoin de rien de tout ça

L’attribution des installations, les événements, le revenu et le ROAS — et les deep links différés sur Android — fonctionnent sans Associated Domains, sans App Links et sans domaine personnalisé. Cette section ne concerne que les liens qui ouvrent l’app déjà installée.

(a) Expo avec les credentials gérés par EAS#

Ajoutez le config plugin @traqio/expo avec votre domaine, puis lancez eas build. Il ajoute applinks:<domaine> à ios.associatedDomains et l’intent filter App Links Android, sans doublonner ce que vous déclarez déjà.

app.json
{
  "expo": {
    "plugins": [["@traqio/expo", { "domains": ["go.example.com"] }]]
  }
}

EAS Build synchronise les capabilities : comme l’entitlement fait partie du build, il activeAssociated Domains sur votre App ID dans le portail Apple Developer à votre place (Expo — iOS capabilities). Si vous avez désactivé la synchro (EXPO_NO_CAPABILITY_SYNC=1) ou gérez l’App ID vous-même, faites-le une fois à la main : Certificates, Identifiers & Profiles → Identifiers → votre bundle id → cochezAssociated Domains → Save, puis régénérez les provisioning profiles qui l’utilisent. Sans cela le build échoue avec « doesn't support the Associated Domains capability ».

(b) iOS natif, dans Xcode#

Target → Signing & Capabilities → + Capability →Associated Domains → ajoutez applinks:go.example.com — l’hôte seul, sanshttps://. En signature automatique, Xcode active la capability sur l’App ID.

(c) Android : les empreintes SHA-256#

Collez dans la console (votre app → Liens → Deep linking) l’empreinte SHA-256 des deux clés : la clé d’upload qui signe votre build, et la clé App Signing de Play — une app installée depuis Google Play est re-signée par Google, donc sans elle les App Links ne se vérifient jamais chez vos vrais utilisateurs.

  • Clé App Signing et clé d’upload : Play Console → Intégrité de l’application → Signature d’application.
  • Une clé d’upload gérée par EAS : eas credentials -p android ; un keystore local :keytool -list -v -keystore upload.jks.
  • L’intent filter vient du plugin sous Expo, ou du snippet AndroidManifest.xml ci-dessus. Android vérifie le domaine à l’installation : après avoir corrigé une empreinte, réinstallez l’app.

Pour tester, touchez un lien https://go.example.com/c/<code> depuis Notes, Messages ou un mail — une URL tapée dans la barre d’adresse du navigateur n’ouvre jamais une app, sur aucun des deux OS.

Deep links différés#

Android : déterministe#

L’Install Referrer de Google Play porte l’identifiant de clic : au premier lancement, Traqio sait donc exactement quel lien a été touché, quel que soit le délai entre le toucher et l’installation. Rien à configurer.

iOS : une correspondance d’IP à activer#

iOS ne fournit pas de referrer. Quand vous activez Associer les deep links différés par IP pour une app (désactivé par défaut), le premier lancement est associé à un clic sur l’un des liens de cette app depuis la même adresse IP dans l’heure précédente — et seulement si :

  • l’adresse n’est pas un VPN, un proxy ou un relais, qui donnerait le lien d’une personne à beaucoup d’autres ;
  • un seul lien avec deep link a été cliqué depuis cette adresse — deux liens depuis une même adresse, ce sont deux personnes.

Elle oriente, elle n’attribue jamais

La correspondance d’IP décide quel écran s’ouvre en premier. Elle n’attribue pas l’installation : l’attribution garde ses propres règles de preuve. Une erreur coûte un mauvais premier écran, jamais un rapport faux ni une facture fausse.

Seule une nouvelle installation pose la question, une seule fois, et la réponse — un lien ou « aucun lien » — est mémorisée. Un utilisateur existant qui passe à une version du SDK avec deep linking n’est jamais orienté par le clic de quelqu’un d’autre.

De l’ordinateur au téléphone#

Un clic sur un lien d’app depuis un ordinateur ne finit plus sur une page web de store. Traqio affiche une page avec un QR code et un code court (ABC-DEF) : le téléphone scanne le QR, ou la personne ouvre <votre domaine de tracking>/h et tape le code. Le téléphone part alors vers son store avec le clic de l’ordinateur — sur Android dans le Play Install Referrer : l’installation est attribuée à ce clic de façon déterministe, et le deep link différé ci-dessus suit.

  • Aucune empreinte, aucune comparaison d’IP : le code est le seul lien entre les deux écrans.
  • Un clic, pas deux — le téléphone reprend le clic de l’ordinateur, il n’en enregistre pas un autre.
  • Le code est valable 30 minutes ; recharger la page en donne un nouveau.
  • Les liens vers un site web, et les apps sans store, gardent la redirection simple.

La fiche de chaque lien dans la console compte les clics ordinateur qui ont vu la page, ceux poursuivis sur un téléphone, et les installations qui ont suivi.

Dans l’app#

Traqio.onDeepLink(({ deepLink, code, deferred, via }) => {
  if (deepLink) router.push(deepLink);
});
ChampSignification
deepLinkla destination définie sur le lien, ou null si le lien n’en a pas
codele slug du lien — quel lien a amené l’utilisateur, même sans destination
deferredtrue quand le lien a été touché avant l’installation
viareferrer (Android, déterministe), ip_match (iOS, probabiliste) ou link (ouverture directe)

Un lien résolu avant tout abonnement est livré au moment de l’abonnement : un démarrage à froid ne perd donc jamais le lien qui a ouvert l’app. La façon dont chaque SDK reçoit les URL — automatiquement ou transmises par votre app — est décrite sur sa page, depuis la vue d’ensemble des SDK. Pour désactiver complètement le deep linking, passez deepLinking: false à l’init.

Questions fréquentes#

Dois-je héberger moi-même apple-app-site-association ou assetlinks.json ?
Non. Traqio sert les deux fichiers sur votre domaine de tracking personnalisé, construits à partir de l’Apple Team ID, du bundle id, du package Android et des empreintes SHA-256 saisis dans la console. Vous déclarez seulement le domaine dans l’app : sous Expo, le config plugin @traqio/expo s’en charge ; dans Xcode, Associated Domains → applinks:<domaine> ; sur Android, un intent filter autoVerify pour https://<domaine>/c/.
Qu’est-ce que le deep linking différé ?
Le deep linking différé envoie un utilisateur qui a touché un lien avant d’installer l’app vers la destination du lien au premier lancement de l’app, après l’installation. Traqio le résout de façon déterministe sur Android via l’Install Referrer de Google Play ; sur iOS, qui n’a pas de referrer, uniquement par une correspondance d’IP que vous activez app par app.
Ai-je besoin de mon propre domaine pour les deep links ?
Pour les deep links directs — un lien qui ouvre l’app déjà installée —, oui : iOS et Android n’ouvrent une app que pour des liens sur un domaine que l’app déclare, et un domaine partagé ne peut pas être déclaré par toutes les apps qui l’utilisent. Les deep links différés fonctionnent sur le domaine partagé.
Traqio utilise-t-il le presse-papiers pour les deep links différés sur iOS ?
Non. Lire le presse-papiers affiche à l’utilisateur la bannière de collage d’iOS et ne fonctionne que depuis Safari. Le deep link différé iOS de Traqio est une correspondance sur la même IP, à activer explicitement, et il ne fait qu’orienter vers le premier écran — il n’attribue jamais l’installation.
Que se passe-t-il quand quelqu’un clique sur un lien d’app Traqio depuis un ordinateur ?
Il voit une page avec un QR code et un code de six caractères au lieu d’une page de store. Scanner le QR, ou taper le code sur la page /h de votre domaine de tracking depuis le téléphone, envoie le téléphone vers son store avec le clic de l’ordinateur : l’installation est attribuée à ce clic de façon déterministe, et le deep link différé suit. Aucune empreinte, aucune comparaison d’IP. Le code est valable 30 minutes.

Mis à jour le 26 octobre 2026