Passer à la documentation

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 personneRésultat
App installée et configuration des liens d’application valideL’app s’ouvre directement sur la destination du lien.
App non installéeKixo utilise la destination de repli vers le site web ou le store choisie pour ce lien.
Navigateur de bureauLa page de repli du site s’ouvre.
Configuration de l’app incomplèteLa 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.

js
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.

js
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.

js
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.

xml
<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.

kotlin
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.

bash
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_HOST

2. 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

  1. Supprimez l’app de l’appareil, puis installez le build signé.
  2. 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.
  3. Vérifiez qu’un appui à froid ouvre l’app sur l’écran attendu.
  4. Laissez l’app ouverte, appuyez de nouveau sur le lien, puis vérifiez l’ouverture à chaud.
  5. 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.

text
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 change

Ce 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.

Guides associés