Liens profonds
Les liens profonds Kixo envoient chaque personne vers la meilleure destination disponible. Si l’app est installée, le même lien HTTPS à vos couleurs ouvre le bon écran dans l’app. Sinon, il peut ouvrir votre site web, l’App Store ou Google Play. Le système d’exploitation gère l’ouverture vérifiée de l’app ; si le lien arrive dans le navigateur, Kixo applique la destination de repli enregistrée pour ce lien.
Commencer dans Kixo
Ouvrez Paramètres du projet → Liens profonds, créez une adresse, puis copiez la configuration affichée pour cette adresse. L’hôte indiqué dans le dashboard fait foi pour tous les extraits ci-dessous.
Ouverture d’un lien
| Appareil de la personne | Résultat |
|---|---|
| App installée et configuration des liens d’application valide | L’app s’ouvre directement sur la destination du lien. |
| App non installée | Kixo utilise la destination de repli vers le site web ou le store choisie pour ce lien. |
| Navigateur de bureau | La page de repli du site s’ouvre. |
| Configuration de l’app incomplète | La destination de repli sûre s’ouvre au lieu d’afficher une invite vers une app défaillante. |
Utilisez l’hôte de marque exact
L’hôte d’un lien Kixo est propre à un projet et ressemble à yourbrand.kixo.cc. Les projets de développement peuvent utiliser une terminaison différente gérée par Kixo. Copiez toujours l’hôte complet depuis le dashboard.
Les jokers ne fonctionnent pas
Configurez yourbrand.kixo.cc, pas *.kixo.cc ni kixo.cc. Android et iOS vérifient l’hôte exact que la personne ouvre.
Relais entre site web et QR
Le SDK Web détecte automatiquement l’arrivée depuis un lien Kixo. Utilisez getLinkData() uniquement si votre site doit récupérer dans son propre routeur le contexte de campagne résolu ou des paramètres personnalisés.
const link = Kixo.getLinkData();
if (link?.params.product_id) {
// URL values are user-controlled. Allowlist them before routing.
router.openProduct(link.params.product_id);
}Proposer « Ouvrir dans l’app » sur le web mobile
Transmettez l’URL publique complète renvoyée par Kixo. La bannière s’affiche uniquement sur le web mobile et laisse le lien Kixo choisir entre l’app installée, le store ou le site web.
Kixo.showSmartBanner({
linkId: 'YOUR_KIXO_LINK_ID',
linkUrl: 'https://YOUR_EXACT_KIXO_HOST/link/YOUR_LINK_SLUG',
title: 'Continue in the app',
});Reprendre une session sur ordinateur à partir d’un QR code
Pour un QR affiché sur votre site web, demandez à Kixo de créer un relais à partir d’un lien existant au lieu de construire vous-même une URL. Kixo utilise les destinations app et site web enregistrées pour ce lien.
const handoff = await Kixo.createQrHandoff({
linkId: 'YOUR_KIXO_LINK_ID',
params: {
product_id: '42',
},
});
qrCode.render(handoff.url);Utilisez les valeurs renvoyées par Kixo
Transmettez l’ID du lien depuis Kixo et affichez l’URL renvoyée sans la modifier. Les params facultatifs ajoutent du contexte à une route autorisée de votre app ou de votre site web ; ils ne remplacent pas la destination du lien. Ne transmettez pas d’ID utilisateur ni d’ID d’appareil.
Liens d’application Android
Avant de modifier le code, enregistrez dans Apps et configuration le nom du package Android et toutes les empreintes SHA-256 de signature de l’app. Si Google Play signe la version de production, ajoutez aussi l’empreinte Play App Signing ainsi que toute empreinte utilisée pour des builds directs ou internes.
1. Ajoutez l’hôte au manifeste
Placez ce filtre d’intent sur l’activité qui gère la navigation de l’app. Remplacez uniquement l’espace réservé de l’hôte.
<activity
android:name=".MainActivity"
android:exported="true">
<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="YOUR_EXACT_KIXO_HOST"
android:pathPrefix="/link/" />
</intent-filter>
</activity>2. Transmettez les ouvertures à chaud
Le SDK Kixo lit un App Link au démarrage à froid. Quand Android réutilise une activité existante, transmettez le nouvel intent pour que l’ouverture à chaud suive le même chemin d’attribution et de routage.
import android.content.Intent
import io.kixo.sdk.Kixo
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
setIntent(intent)
intent.dataString?.let { url ->
Kixo.handleDeepLink(url, source = "applink")
}
}3. Vérifiez Android
Réinstallez l’app après avoir modifié le manifeste, puis demandez à Android de vérifier l’hôte et contrôlez le résultat.
adb shell pm verify-app-links --re-verify YOUR_ANDROID_PACKAGE
adb shell pm get-app-links YOUR_ANDROID_PACKAGE
# The exact host should be "verified".
adb shell am start -W \
-a android.intent.action.VIEW \
-d "https://YOUR_EXACT_KIXO_HOST/link/YOUR_LINK_SLUG"Conseil
Si un sélecteur de navigateur s’affiche, c’est généralement que l’hôte exact, le nom du package ou l’empreinte de signature ne correspondent pas. Vérifiez d’abord ces trois valeurs avant de modifier le code de navigation de l’app.
Liens universels iOS
Enregistrez le bundle ID de l’app et l’Apple team ID dans Apps et configuration. Dans Xcode, activez la capacité Domaines associés sur la même cible d’app et avec la même configuration de signature que celle du build installé.
1. Ajoutez le domaine associé
applinks:YOUR_EXACT_KIXO_HOST2. Transmettez les ouvertures à froid et à chaud
Choisissez le cycle de vie utilisé par l’app. Dans les deux exemples, la destination résolue est transmise à votre propre routeur ; Kixo ne remplace pas la navigation de l’app.
import Kixo
WindowGroup {
ContentView()
.onKixoDeepLink { link in
guard link.phase == .resolved else { return }
router.open(link.targetPath ?? link.path)
}
}3. Vérifiez iOS
- Supprimez l’app de l’appareil, puis installez le build signé.
- Ouvrez un vrai lien Kixo depuis Notes, Messages ou Safari. Pour ce test, ne vous contentez pas de le coller dans la barre d’adresse de Safari.
- Vérifiez qu’un appui à froid ouvre l’app sur l’écran attendu.
- Laissez l’app ouverte, appuyez de nouveau sur le lien, puis vérifiez l’ouverture à chaud.
- Vérifiez que l’ouverture du lien apparaît dans Kixo.
Gardez le routage dans votre app
Un lien Kixo peut contenir une destination comme /products/42. Faites correspondre les chemins connus à vos propres écrans et conservez les contrôles d’accès déjà en place dans l’app. N’utilisez pas la valeur résolue comme ouvreur d’URL générique.
Kixo.setDeferredDeepLinkListener { link ->
if (link?.phase != KixoDeepLinkPhase.RESOLVED) return@setDeferredDeepLinkListener
when {
link.targetUrl?.startsWith("/products/") == true ->
router.openProduct(link.targetUrl.substringAfterLast("/"))
link.targetUrl == "/account" ->
router.openAccount()
}
}Donnez ceci à un assistant de développement
Remplacez les cinq espaces réservés par les valeurs de Paramètres du projet → Apps et configuration et Liens profonds, puis collez le brief complet dans Codex, Claude Code, Cursor, Windsurf ou un autre assistant de développement.
Add Kixo Deep Links to this app.
Project values:
- Kixo branded host: YOUR_EXACT_KIXO_HOST
- Android package name: YOUR_ANDROID_PACKAGE
- Android SHA-256 signing fingerprints: YOUR_ANDROID_FINGERPRINTS
- iOS bundle ID: YOUR_IOS_BUNDLE_ID
- Apple team ID: YOUR_APPLE_TEAM_ID
Requirements:
1. Use the exact branded host above. Do not replace it with kixo.cc, dixo.dev, a wildcard, or the website domain.
2. Keep the app's existing navigation. Kixo resolves and measures the link; the app decides which screen to show.
3. Android:
- add an android:autoVerify App Links intent filter for https://YOUR_EXACT_KIXO_HOST/link/
- keep the package name and every release signing fingerprint in Kixo Apps & setup
- forward warm Activity.onNewIntent URLs to Kixo.handleDeepLink(url, source = "applink")
4. iOS:
- add applinks:YOUR_EXACT_KIXO_HOST to the app target's Associated Domains entitlement
- keep the bundle ID and Apple team ID in Kixo Apps & setup
- for SwiftUI, attach .onKixoDeepLink to the root view
- for UIKit scenes, forward cold connectionOptions and warm NSUserActivity callbacks to Kixo
5. Route only known in-app paths. Do not blindly open an arbitrary URL returned by a link.
6. Test a cold open and a warm open on a physical device or emulator. Confirm the app opens directly and the link open appears in Kixo.
Return:
- the files changed
- the exact host configured in each platform
- cold-open and warm-open test results
- anything still requiring a dashboard or signing-account changeCe que l’assistant ne doit pas déduire
L’hôte à vos couleurs, le nom du package, les empreintes de signature, le bundle ID et l’Apple team ID proviennent de votre app et de votre projet Kixo. Un assistant peut intégrer le code, mais il doit s’arrêter et signaler toute valeur manquante au lieu d’en inventer une.
Checklist de mise en production
- L’hôte Kixo exact est bien présent dans la configuration Android et iOS.
- Android indique que l’hôte est vérifié pour le package de production.
- Les empreintes de signature de production sont enregistrées dans Kixo.
- L’entitlement iOS est bien présent dans le build signé de l’app.
- Les ouvertures à froid et à chaud mènent bien à l’écran attendu.
- Le repli vers le site web ou la boutique d’apps fonctionne même si l’app n’est pas installée.
- L’ouverture du lien apparaît dans les analyses Kixo.