Deep link
I Kixo Deep Links inviano ogni persona alla destinazione migliore disponibile. Se l'app è installata, lo stesso link HTTPS brandizzato apre la schermata giusta nell'app. Altrimenti può aprire il tuo sito, App Store o il fallback di Google Play. L'apertura verificata dell'app è gestita dal sistema operativo; se il link arriva nel browser, Kixo applica il fallback salvato per quel link.
Inizia da Kixo
Apri Impostazioni progetto → Link profondi, crea un indirizzo e copia la configurazione mostrata per quell'indirizzo. L'host nella dashboard è la fonte di riferimento per tutti gli snippet qui sotto.
Come si apre un link
| Dispositivo della persona | Risultato |
|---|---|
| App installata e configurazione degli App Link valida | L'app si apre direttamente sulla destinazione del link. |
| App non installata | Kixo usa il fallback del sito o dello store selezionato per quel link. |
| Browser desktop | Si apre il fallback del sito. |
| Configurazione dell'app incompleta | Si apre il fallback sicuro invece di mostrare un prompt dell'app non funzionante. |
Usa l'host brandizzato esatto
L'host di un link Kixo appartiene a un solo progetto e ha un aspetto come yourbrand.kixo.cc. Nei progetti di sviluppo può avere un suffisso diverso gestito da Kixo. Copia sempre l'host completo dalla dashboard.
I caratteri jolly non funzionano
Configura yourbrand.kixo.cc, non *.kixo.cc e non kixo.cc. Android e iOS verificano l'host esatto che la persona apre.
Sito web e handoff QR
Il Web SDK riconosce automaticamente l'arrivo da un link Kixo. Usa getLinkData() solo se il tuo sito deve usare nel proprio router il contesto della campagna risolta o parametri personalizzati.
const link = Kixo.getLinkData();
if (link?.params.product_id) {
// URL values are user-controlled. Allowlist them before routing.
router.openProduct(link.params.product_id);
}Offri “Apri nell'app” sul web mobile
Passa l'URL pubblico completo restituito da Kixo. Il banner viene mostrato solo sul web mobile e lascia al link Kixo la scelta tra app installata, store o destinazione web.
Kixo.showSmartBanner({
linkId: 'YOUR_KIXO_LINK_ID',
linkUrl: 'https://YOUR_EXACT_KIXO_HOST/link/YOUR_LINK_SLUG',
title: 'Continue in the app',
});Riprendi una sessione desktop da un codice QR
Per un QR mostrato sul tuo sito, chiedi a Kixo di creare un handoff per un link esistente invece di costruire tu un URL. Kixo usa le destinazioni dell'app e del sito già salvate per quel link.
const handoff = await Kixo.createQrHandoff({
linkId: 'YOUR_KIXO_LINK_ID',
params: {
product_id: '42',
},
});
qrCode.render(handoff.url);Usa i valori restituiti da Kixo
Passa l'ID del link da Kixo e usa l'URL restituito senza modificarlo. I params facoltativi aggiungono contesto al percorso dell'app o del sito presente nell'allowlist; non sostituiscono la destinazione del link. Non passare un ID utente o un ID dispositivo.
Android App Links
Prima di modificare il codice, salva in App e configurazione il nome del pacchetto Android e tutte le impronte SHA-256 della firma dell'app. Se la release è firmata da Google Play, aggiungi anche l'impronta di Play App Signing, oltre a quelle usate per build dirette o interne.
1. Aggiungi l'host al manifest
Aggiungi questo intent filter all'activity che gestisce la navigazione dell'app. Sostituisci solo il segnaposto dell'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. Gestisci le aperture a caldo
L'SDK di Kixo legge un App Link all'avvio a freddo. Quando Android riutilizza un'activity esistente, inoltra il nuovo intent così l'apertura a caldo segue lo stesso percorso di attribuzione e routing.
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
Dopo aver modificato il manifest, reinstalla l'app, poi chiedi ad Android di verificare l'host e controlla il risultato.
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"Suggerimento
Se compare il selettore del browser, di solito l'host esatto, il nome del pacchetto o l'impronta della firma non corrispondono. Controlla questi tre valori prima di toccare il codice di navigazione dell'app.
iOS Universal Links
Salva in App e configurazione il bundle ID dell'app e l'Apple team ID. In Xcode, abilita la capability Domini associati sullo stesso target dell'app e con la stessa configurazione di firma usata dalla build installata.
1. Aggiungi il dominio associato
applinks:YOUR_EXACT_KIXO_HOST2. Gestisci i link a freddo e a caldo
Scegli il ciclo di vita usato dall'app. In entrambi gli esempi, la destinazione risolta viene passata al router della tua app; Kixo non sostituisce la navigazione dell'app.
import Kixo
WindowGroup {
ContentView()
.onKixoDeepLink { link in
guard link.phase == .resolved else { return }
router.open(link.targetPath ?? link.path)
}
}3. Verifica iOS
- Rimuovi l'app dal dispositivo, poi installa la build firmata.
- Apri un vero link Kixo da Note, Messaggi o Safari. Non limitarti a incollarlo nella barra degli indirizzi di Safari come unico test.
- Verifica che un'apertura a freddo avvii l'app sulla schermata prevista.
- Lascia l'app aperta, tocca di nuovo il link e verifica l'apertura a caldo.
- Verifica che l'apertura del link compaia in Kixo.
Mantieni il routing dentro l'app
Un link Kixo può includere una destinazione come /products/42. Mappa i percorsi che conosci alle schermate della tua app e mantieni i controlli di accesso già presenti. Non trasformare il valore risolto in un apri-URL generico.
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()
}
}Passa questo a un assistente di sviluppo
Sostituisci i cinque segnaposto con i valori presi da Impostazioni progetto → App e configurazione e Deep link, poi incolla il brief completo in Codex, Claude Code, Cursor, Windsurf o in un altro assistente di sviluppo.
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 changeCosa l'assistente non deve inventare
L'host brandizzato, il nome del pacchetto, le impronte della firma, il bundle ID e l'Apple team ID provengono dalla tua app e dal progetto Kixo. Un assistente può collegare il codice, ma deve fermarsi e segnalare un valore mancante invece di inventarlo.
Checklist di rilascio
- L'host Kixo esatto è presente nella configurazione di Android e iOS.
- Android segnala l'host come verificato per il pacchetto di release.
- Le impronte di firma della release sono salvate in Kixo.
- L'entitlement di iOS è presente nella build firmata dell'app.
- Le aperture a freddo e a caldo portano alla schermata prevista.
- Il fallback del sito o dello store funziona anche senza l'app installata.
- L'apertura del link compare nelle analisi di Kixo.