Dieplinks
Kixo Deep Links sturen iedereen naar de best beschikbare bestemming. Is de app geïnstalleerd, dan opent dezelfde branded HTTPS-link het juiste scherm in de app. Anders kan de link je website, App Store of de fallback naar Google Play openen. Het besturingssysteem regelt het openen van een geverifieerde app; komt de link in de browser terecht, dan past Kixo de fallback toe die voor die link is opgeslagen.
Begin in Kixo
Open Projectinstellingen → Dieplinks, maak een adres aan en kopieer de configuratie die bij dat adres wordt getoond. De host in het dashboard is leidend voor alle snippets hieronder.
Hoe een link opent
| Apparaat van de gebruiker | Resultaat |
|---|---|
| App is geïnstalleerd en de App Link-configuratie is geldig | De app opent direct op de bestemming van de link. |
| App is niet geïnstalleerd | Kixo gebruikt de website- of storefallback die voor de link is ingesteld. |
| Desktopbrowser | De websitefallback opent. |
| Appconfiguratie is onvolledig | De veilige fallback opent, in plaats van een kapotte appprompt te tonen. |
Gebruik exact de branded host
Een Kixo-linkhost hoort bij één project en ziet eruit als yourbrand.kixo.cc. Ontwikkelprojecten kunnen een andere, door Kixo beheerde uitgang gebruiken. Kopieer altijd de volledige host uit het dashboard.
Wildcards werken niet
Configureer yourbrand.kixo.cc, niet *.kixo.cc en ook niet kixo.cc. Android en iOS verifiëren precies de host die iemand opent.
Website- en QR-handoff
De Web SDK herkent automatisch een landing via een Kixo-link. Gebruik getLinkData() alleen als je website de opgeloste campagnecontext of aangepaste parameters in de eigen router nodig heeft.
const link = Kixo.getLinkData();
if (link?.params.product_id) {
// URL values are user-controlled. Allowlist them before routing.
router.openProduct(link.params.product_id);
}Bied “Open in app” aan op mobiel web
Geef de volledige openbare link-URL door die Kixo terugstuurt. De banner verschijnt alleen op mobiel web en laat de Kixo-link kiezen tussen de geïnstalleerde app, de store of de webbestemming.
Kixo.showSmartBanner({
linkId: 'YOUR_KIXO_LINK_ID',
linkUrl: 'https://YOUR_EXACT_KIXO_HOST/link/YOUR_LINK_SLUG',
title: 'Continue in the app',
});Ga vanuit een QR-code verder met een desktopsessie
Voor een QR-code op je website laat je Kixo een handoff maken voor een bestaande link, in plaats van zelf een URL op te bouwen. Kixo gebruikt daarvoor de app- en webbestemmingen die voor die link zijn opgeslagen.
const handoff = await Kixo.createQrHandoff({
linkId: 'YOUR_KIXO_LINK_ID',
params: {
product_id: '42',
},
});
qrCode.render(handoff.url);Gebruik de waarden die Kixo terugstuurt
Geef de link-ID uit Kixo door en render de teruggestuurde URL ongewijzigd. Optionele params voegen context toe voor je allowlisted app- of webroute; ze vervangen de bestemming van de link niet. Geef geen user ID of device ID door.
Android App Links
Leg in Apps en configuratie eerst de Android-pakketnaam en alle SHA-256-ondertekeningsvingerafdrukken van de app vast voordat je code aanpast. Als Google Play de release ondertekent, voeg dan ook de vingerafdruk van Play App Signing toe, naast eventuele vingerafdrukken van directe of interne builds.
1. Voeg de host toe aan het manifest
Plaats dit intent filter op de activity die de appnavigatie afhandelt. Vervang alleen de host-placeholder.
<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. Verwerk warme opens
De Kixo SDK leest een App Link bij een koude start. Als Android een bestaande activity hergebruikt, geef de nieuwe intent dan door zodat de warme open hetzelfde pad voor attributie en routing volgt.
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. Verifieer Android
Installeer de app opnieuw nadat je het manifest hebt aangepast, laat Android daarna de host verifiëren en controleer de uitkomst.
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"Tip
Verschijnt er een browserkiezer, dan komen host, pakketnaam of ondertekeningsvingerafdruk meestal niet exact overeen. Controleer eerst die drie waarden voordat je de navigatiecode van de app aanpast.
iOS Universal Links
Sla de bundle ID en Apple team ID van de app op in Apps en configuratie. Schakel in Xcode de capability Associated Domains in voor hetzelfde app target en dezelfde ondertekeningsconfiguratie als de geïnstalleerde build.
1. Voeg het bijbehorende domein toe
applinks:YOUR_EXACT_KIXO_HOST2. Verwerk koude en warme opens
Kies de lifecycle die je app gebruikt. Beide voorbeelden geven de opgeloste bestemming door aan je eigen router; Kixo vervangt de appnavigatie niet.
import Kixo
WindowGroup {
ContentView()
.onKixoDeepLink { link in
guard link.phase == .resolved else { return }
router.open(link.targetPath ?? link.path)
}
}3. Verifieer iOS
- Verwijder de app van het apparaat en installeer daarna de ondertekende build.
- Open een echte Kixo-link vanuit Notities, Berichten of Safari. Gebruik plakken in de adresbalk van Safari niet als enige test.
- Controleer of een koude tik de app op het verwachte scherm opent.
- Laat de app open, tik opnieuw op de link en controleer de warme open.
- Controleer of het openen van de link in Kixo verschijnt.
Houd de routing binnen je app
Een Kixo-link kan een bestemming bevatten, zoals /products/42. Koppel bekende paden aan je eigen schermen en behoud de bestaande toegangscontroles van de app. Gebruik de opgeloste waarde niet als algemene URL-opener.
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()
}
}Geef dit aan een codeassistent
Vervang de vijf placeholders door waarden uit Projectinstellingen → Apps en configuratie en Dieplinks en plak daarna de volledige briefing in Codex, Claude Code, Cursor, Windsurf of een andere codeassistent.
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 changeWat de assistent niet zelf mag invullen
De branded host, pakketnaam, ondertekeningsvingerafdrukken, bundle ID en Apple team ID komen uit je app en je Kixo-project. Een assistent kan de code opzetten, maar moet stoppen en melden dat een waarde ontbreekt in plaats van er zelf een te verzinnen.
Checklist voor de release
- De exacte Kixo-host staat in de configuratie voor Android en iOS.
- Android meldt dat de host is geverifieerd voor het releasepakket.
- De ondertekeningsvingerafdrukken voor de release zijn opgeslagen in Kixo.
- De iOS-entitlement is aanwezig in de ondertekende app-build.
- Koude en warme opens komen op het verwachte scherm uit.
- De website- of storefallback werkt ook zonder geïnstalleerde app.
- Het openen van de link verschijnt in Kixo analytics.