Enllaços profunds
Els Kixo Deep Links envien cada persona a la millor destinació disponible. Si l’app està instal·lada, el mateix enllaç HTTPS amb marca obre la pantalla correcta dins de l’app. Si no ho està, pot obrir el teu web o bé el fallback d’App Store o Google Play. El sistema operatiu gestiona l’obertura verificada de l’app; quan l’enllaç arriba al navegador, Kixo aplica el fallback desat per a aquell enllaç.
Comença a Kixo
Obre Configuració del projecte → Enllaços profunds, crea una adreça i copia la configuració que s’hi mostra. L’host del dashboard és la referència per a tots els fragments de codi següents.
Com s’obre un enllaç
| Dispositiu de la persona | Resultat |
|---|---|
| App instal·lada i configuració de l’enllaç d’app vàlida | L’app s’obre directament a la destinació de l’enllaç. |
| App no instal·lada | Kixo fa servir el fallback web o de botiga seleccionat per a l’enllaç. |
| Navegador d’escriptori | S’obre el fallback web. |
| Configuració de l’app incompleta | S’obre el fallback segur en lloc de mostrar un avís d’app trencat. |
Fes servir l’host exacte amb marca
L’host d’un enllaç de Kixo pertany a un sol projecte i té un format com yourbrand.kixo.cc. Els projectes de desenvolupament poden fer servir una terminació diferent gestionada per Kixo. Copia sempre l’host complet des del dashboard.
Els comodins no funcionen
Configura yourbrand.kixo.cc, no pas *.kixo.cc ni kixo.cc. Android i iOS verifiquen l’host exacte que obre la persona.
Transferència entre web i QR
L’SDK web detecta automàticament l’arribada d’un enllaç de Kixo. Fes servir getLinkData() només si el teu web necessita el context de campanya resolt o paràmetres personalitzats dins del seu encaminador.
const link = Kixo.getLinkData();
if (link?.params.product_id) {
// URL values are user-controlled. Allowlist them before routing.
router.openProduct(link.params.product_id);
}Ofereix «Obre a l’app» al web mòbil
Passa la URL pública completa de l’enllaç retornada per Kixo. El bàner només es mostra al web mòbil i deixa que l’enllaç de Kixo triï entre l’app instal·lada, la botiga o la destinació web.
Kixo.showSmartBanner({
linkId: 'YOUR_KIXO_LINK_ID',
linkUrl: 'https://YOUR_EXACT_KIXO_HOST/link/YOUR_LINK_SLUG',
title: 'Continue in the app',
});Continua una sessió d’escriptori des d’un codi QR
Si mostres un QR dins del teu web, demana a Kixo que creï una transferència a partir d’un enllaç existent en lloc de construir tu mateix una URL. Kixo fa servir les destinacions d’app i web desades per a aquell enllaç.
const handoff = await Kixo.createQrHandoff({
linkId: 'YOUR_KIXO_LINK_ID',
params: {
product_id: '42',
},
});
qrCode.render(handoff.url);Fes servir els valors retornats per Kixo
Passa l’ID de l’enllaç de Kixo i mostra la URL retornada sense cap canvi. Els params opcionals afegeixen context a la ruta permesa de l’app o del web; no substitueixen la destinació de l’enllaç. No hi passis cap ID d’usuari ni cap ID de dispositiu.
Android App Links
Abans d’editar codi, desa el nom del paquet d’Android i totes les empremtes SHA-256 de signatura de l’app a Apps i configuració. Si Google Play signa la release, afegeix-hi també l’empremta de Play App Signing i qualsevol empremta usada en builds directes o internes.
1. Afegeix l’host al manifest
Posa aquest filtre d’intencions a l’activity que controla la navegació de l’app. Substitueix només el marcador de posició de l’host.
<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. Reenvia les obertures en calent
L’SDK de Kixo llegeix un App Link en una arrencada en fred. Quan Android reutilitza una activity existent, passa-li la nova intent perquè l’obertura en calent segueixi el mateix camí d’atribució i encaminament.
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. Verifica Android
Reinstal·la l’app després de canviar el manifest, després demana a Android que verifiqui l’host i revisa’n el resultat.
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"Consell
Que s’obri un selector de navegador sol indicar que l’host exacte, el nom del paquet o l’empremta de signatura no coincideixen. Revisa aquests tres valors abans de tocar el codi de navegació de l’app.
iOS Universal Links
Desa el bundle ID de l’app i l’Apple team ID a Apps i configuració. A Xcode, activa la capacitat Associated Domains al mateix target de l’app i amb la mateixa configuració de signatura que fa servir la build instal·lada.
1. Afegeix el domini associat
applinks:YOUR_EXACT_KIXO_HOST2. Reenvia els enllaços en fred i en calent
Tria el cicle de vida que fa servir l’app. Tots dos exemples passen la destinació resolta al teu encaminador; Kixo no substitueix la navegació de l’app.
import Kixo
WindowGroup {
ContentView()
.onKixoDeepLink { link in
guard link.phase == .resolved else { return }
router.open(link.targetPath ?? link.path)
}
}3. Verifica iOS
- Suprimeix l’app del dispositiu i després instal·la la build signada.
- Obre un enllaç real de Kixo des de Notes, Missatges o Safari. No el provis només enganxant-lo a la barra d’adreces de Safari.
- Confirma que, en una obertura en fred, l’app s’obre a la pantalla esperada.
- Deixa l’app oberta, torna a tocar l’enllaç i confirma l’obertura en calent.
- Confirma que l’obertura de l’enllaç apareix a Kixo.
Mantén l’encaminament dins de l’app
Un enllaç de Kixo pot incloure una destinació com /products/42. Assigna els camins coneguts a les teves pantalles i mantén els controls d’accés que ja té l’app. No converteixis el valor resolt en un obridor de URL d’ús general.
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()
}
}Dona això a un assistent de programació
Substitueix els cinc marcadors de posició pels valors de Configuració del projecte → Apps i configuració i Enllaços profunds, i enganxa el text complet a Codex, Claude Code, Cursor, Windsurf o un altre assistent de programació.
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 changeQuè no ha d’endevinar l’assistent
L’host amb marca, el nom del paquet, les empremtes de signatura, el bundle ID i l’Apple team ID surten de la teva app i del projecte de Kixo. Un assistent pot connectar el codi, però s’ha d’aturar i indicar que falta un valor en lloc d’inventar-se’l.
Llista de comprovació de release
- L’host exacte de Kixo és present a la configuració d’Android i iOS.
- Android indica que l’host està verificat per al paquet de release.
- Les empremtes de signatura de release estan desades a Kixo.
- L’entitlement d’iOS és present a la build signada de l’app.
- Les obertures en fred i en calent arriben a la pantalla esperada.
- El fallback web o de botiga funciona sense l’app instal·lada.
- L’obertura de l’enllaç apareix a l’analítica de Kixo.