Ir a la documentación

Enlaces profundos

Kixo Deep Links envía a cada persona al mejor destino disponible. Si la app está instalada, el mismo enlace HTTPS con tu marca abre la pantalla correcta en la app. Si no, puede abrir tu sitio web, App Store o Google Play como fallback. El sistema operativo se encarga de abrir la app cuando la verificación es válida; si el enlace llega al navegador, Kixo aplica el fallback guardado para ese enlace.

Empieza en Kixo

Abre Configuración del proyecto → Enlaces profundos, crea una dirección y copia la configuración que se muestra para esa dirección. El host del dashboard es la referencia para todos los fragmentos de código siguientes.

Cómo se abre un enlace

Dispositivo de la personaResultado
App instalada y App Link configurado correctamenteLa app se abre directamente en el destino del enlace.
App no instaladaKixo usa el fallback web o de tienda configurado para ese enlace.
Navegador de escritorioSe abre el fallback web.
Configuración de la app incompletaSe abre el fallback seguro en lugar de mostrar un aviso de apertura de app roto.

Usa el host exacto con tu marca

El host de un enlace de Kixo pertenece a un único proyecto y tiene un aspecto como yourbrand.kixo.cc. Los proyectos de desarrollo pueden usar una terminación distinta gestionada por Kixo. Copia siempre el host completo desde el dashboard.

Los comodines no funcionan

Configura yourbrand.kixo.cc, no *.kixo.cc ni kixo.cc. Android e iOS verifican el host exacto que abre la persona.

Handoff de sitio web y QR

El SDK web detecta automáticamente una llegada desde un enlace de Kixo. Usa getLinkData() solo cuando tu sitio web necesite el contexto de campaña resuelto o parámetros personalizados en su propio router.

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);
}

Ofrece “Abrir en la app” en la web móvil

Pasa la URL pública completa que devuelve Kixo. El banner solo se muestra en la web móvil y deja que el enlace de Kixo elija entre la app instalada, la tienda o el destino web.

js
Kixo.showSmartBanner({
  linkId: 'YOUR_KIXO_LINK_ID',
  linkUrl: 'https://YOUR_EXACT_KIXO_HOST/link/YOUR_LINK_SLUG',
  title: 'Continue in the app',
});

Continúa una sesión de escritorio con un código QR

Si muestras un QR dentro de tu sitio web, pídele a Kixo que cree un handoff a partir de un enlace ya existente en lugar de construir tú la URL. Kixo usa los destinos de app y web guardados para ese enlace.

js
const handoff = await Kixo.createQrHandoff({
  linkId: 'YOUR_KIXO_LINK_ID',
  params: {
    product_id: '42',
  },
});

qrCode.render(handoff.url);

Usa los valores que devuelve Kixo

Pasa el ID del enlace de Kixo y muestra la URL devuelta sin modificarla. Los params opcionales añaden contexto a una ruta permitida de tu app o de tu sitio web; no sustituyen el destino del enlace. No pases un ID de usuario ni un ID de dispositivo.

Android App Links

Antes de tocar el código, guarda el nombre del paquete de Android y todas las huellas de firma SHA-256 de la app en Apps y configuración. Si Google Play firma la release, añade también la huella de Play App Signing, además de cualquier huella usada en compilaciones directas o internas.

1. Añade el host al manifest

Pon este intent filter en la activity que controla la navegación de la app. Sustituye solo el marcador del host.

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. Reenvía las aperturas con la app abierta

El SDK de Kixo lee un App Link en un arranque en frío. Cuando Android reutiliza una activity existente, reenvía el nuevo intent para que la apertura en caliente siga la misma ruta de atribución y enrutado.

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. Verifica Android

Reinstala la app después de cambiar el manifest y luego pide a Android que verifique el host y revisa el resultado.

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"

Consejo

Si aparece un selector de navegador, normalmente es porque no coincide el host exacto, el nombre del paquete o la huella de firma. Revisa esos tres valores antes de cambiar el código de navegación de la app.

iOS Universal Links

Guarda el bundle ID de la app y el Apple team ID en Apps y configuración. En Xcode, activa la capability Dominios asociados en el mismo target de la app y con la misma configuración de firma que usa la compilación instalada.

1. Añade el dominio asociado

applinks:YOUR_EXACT_KIXO_HOST

2. Reenvía los enlaces con la app cerrada y abierta

Elige el ciclo de vida que usa la app. En ambos ejemplos, el destino resuelto se entrega a tu propio router; Kixo no sustituye la navegación de la app.

import Kixo

WindowGroup {
    ContentView()
        .onKixoDeepLink { link in
            guard link.phase == .resolved else { return }
            router.open(link.targetPath ?? link.path)
        }
}

3. Verifica iOS

  1. Elimina la app del dispositivo y vuelve a instalar la compilación firmada.
  2. Abre un enlace real de Kixo desde Notas, Mensajes o Safari. No lo pegues en la barra de direcciones de Safari como única prueba.
  3. Confirma que, con la app cerrada, al tocar el enlace se abre la pantalla esperada.
  4. Deja la app abierta, vuelve a tocar el enlace y confirma la apertura en caliente.
  5. Confirma que la apertura del enlace aparece en Kixo.

Mantén el enrutado dentro de la app

Un enlace de Kixo puede incluir un destino como /products/42. Asocia las rutas conocidas a tus propias pantallas y mantén los controles de acceso actuales de la app. No conviertas el valor resuelto en un abridor genérico de URL.

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()
    }
}

Pásale esto a un asistente de programación

Sustituye los cinco marcadores por los valores de Configuración del proyecto → Apps y configuración y Enlaces profundos, y pega después las instrucciones completas en Codex, Claude Code, Cursor, Windsurf o cualquier otro asistente de programación.

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

Lo que el asistente no debe deducir

El host con tu marca, el nombre del paquete, las huellas de firma, el bundle ID y el Apple team ID salen de tu app y de tu proyecto de Kixo. Un asistente puede cablear el código, pero debe detenerse e indicar qué valor falta en lugar de inventárselo.

Checklist de release

  • El host exacto de Kixo está presente en la configuración de Android e iOS.
  • Android indica que el host está verificado para el paquete de release.
  • Las huellas de firma de release están guardadas en Kixo.
  • El entitlement de iOS está presente en la compilación firmada de la app.
  • Las aperturas en frío y en caliente llegan a la pantalla esperada.
  • El fallback web o de tienda funciona sin la app instalada.
  • La apertura del enlace aparece en la analítica de Kixo.

Guías relacionadas