Saltar al contenido

Deep Linking

GitHubnpmcrates.io
Referencia de API

Establece tu aplicación Tauri como el manejador predeterminado para una URL.

Este plugin requiere una versión de Rust de al menos 1.77.2

PlataformaNivelNotas
windows
linux
macos

Los deep links deben registrarse en la configuración. El registro dinámico en tiempo de ejecución no es compatible.

android

Los deep links deben registrarse en la configuración. El registro dinámico en tiempo de ejecución no es compatible.

ios

Los deep links deben registrarse en la configuración. El registro dinámico en tiempo de ejecución no es compatible.

Instala el plugin deep-link para comenzar.

Usa el gestor de paquetes de tu proyecto para agregar la dependencia:

npm run tauri add deep-link

Hay dos formas de abrir tu aplicación desde enlaces en Android:

  1. App Links (http/https + host, verificado) Para app links, necesitas un servidor con un endpoint .well-known/assetlinks.json que debe devolver una respuesta de texto en el formato dado:
.well-known/assetlinks.json
[
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "$APP_BUNDLE_ID",
"sha256_cert_fingerprints": [
$CERT_FINGERPRINT
]
}
}
]

Donde $APP_BUNDLE_ID es el valor definido en tauri.conf.json > identifier con - reemplazado por _ y $CERT_FINGERPRINT es una lista de huellas digitales SHA256 de los certificados de firma de tu aplicación, consulta verificar Android applinks para más información.

  1. Esquemas URI personalizados (no requiere host, sin verificación) Para URIs como myapp://..., puedes declarar un esquema personalizado sin alojar ningún archivo. Usa el campo scheme en la configuración móvil y omite el host.

Hay dos formas de abrir tu aplicación desde enlaces en iOS:

  1. Universal Links (https + host, verificado) Para universal links, necesitas un servidor con un endpoint .well-known/apple-app-site-association que debe devolver una respuesta JSON en el formato dado:
.well-known/apple-app-site-association
{
"applinks": {
"details": [
{
"appIDs": ["$DEVELOPMENT_TEAM_ID.$APP_BUNDLE_ID"],
"components": [
{
"/": "/open/*",
"comment": "Matches any URL whose path starts with /open/"
}
]
}
]
}
}

Donde $DEVELOPMENT_TEAM_ID es el valor definido en tauri.conf.json > bundle > iOS > developmentTeam o la variable de entorno TAURI_APPLE_DEVELOPMENT_TEAM y $APP_BUNDLE_ID es el valor definido en tauri.conf.json > identifier.

Para verificar si tu dominio se ha configurado correctamente para exponer las asociaciones de la app, puedes ejecutar el siguiente comando, reemplazando <host> con tu host real:

Ventana de terminal
curl -v https://app-site-association.cdn-apple.com/a/v1/<host>

Consulta applinks.details para más información.

  1. Esquemas URI personalizados (sin host, sin verificación) Para URIs como myapp://..., puedes declarar un esquema personalizado bajo la configuración móvil con "appLink": false (o omitirlo). El plugin genera las entradas CFBundleURLTypes apropiadas en el Info.plist de tu aplicación. No se necesitan archivos .well-known ni host HTTPS.

En Linux y Windows los deep links se entregan como un argumento de línea de comandos a un nuevo proceso de la aplicación. El plugin deep link tiene integración con el plugin single instance si prefieres tener una única instancia de la aplicación recibiendo los eventos.

  • Primero debes agregar la característica deep-link al plugin single instance:
src-tauri/Cargo.toml
[target."cfg(any(target_os = \"macos\", windows, target_os = \"linux\"))".dependencies]
tauri-plugin-single-instance = { version = "2.0.0", features = ["deep-link"] }
  • Luego configura el plugin single instance, que siempre debe ser el primer plugin que registres:
src-tauri/lib.rs
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
let mut builder = tauri::Builder::default();
#[cfg(desktop)]
{
builder = builder.plugin(tauri_plugin_single_instance::init(|_app, argv, _cwd| {
println!("a new app instance was opened with {argv:?} and the deep link event was already triggered");
// when defining deep link schemes at runtime, you must also check `argv` here
}));
}
builder = builder.plugin(tauri_plugin_deep_link::init());
}

En tauri.conf.json > plugins > deep-link, configura dominios/esquemas móviles y esquemas de escritorio que quieras asociar con tu aplicación.

Esquema personalizado en móviles (no requiere servidor):

tauri.conf.json
{
"plugins": {
"deep-link": {
"mobile": [
{
"scheme": ["ovi"],
"appLink": false
}
]
}
}
}

Esto registra el esquema ovi://* en Android y iOS.

App Link / Universal Link (https + host verificado):

{
"plugins": {
"deep-link": {
"mobile": [
{
"scheme": ["https"],
"host": "your.website.com",
"pathPrefix": ["/open"],
"appLink": true
}
]
}
}
}

Esto registra https://your.website.com/open/* como un app/universal link.

Desktop custom schemes:

{
"plugins": {
"deep-link": {
"desktop": {
"schemes": ["something", "my-tauri-app"]
}
}
}
}

El plugin deep-link está disponible tanto en JavaScript como en Rust.

Cuando un deep link activa tu aplicación mientras se está ejecutando, se llama al callback onOpenUrl. Para detectar si tu aplicación se abrió mediante un deep link, usa getCurrent al iniciar la aplicación.

import { getCurrent, onOpenUrl } from '@tauri-apps/plugin-deep-link';
// when using `"withGlobalTauri": true`, you may use
// const { getCurrent, onOpenUrl } = window.__TAURI__.deepLink;
const startUrls = await getCurrent();
if (startUrls) {
// App was likely started via a deep link
// Note that getCurrent's return value will also get updated every time onOpenUrl gets triggered.
}
await onOpenUrl((urls) => {
console.log('deep link:', urls);
});
Sección titulada “Registrar Deep Links de Escritorio en Tiempo de Ejecución”

La sección de configuración describe cómo definir esquemas de deep link estáticos para tu aplicación.

En Linux y Windows también es posible asociar esquemas con tu aplicación en tiempo de ejecución a través de la función de Rust register.

En el siguiente fragmento, registraremos el esquema my-app en tiempo de ejecución. Después de ejecutar la aplicación por primera vez, el sistema operativo abrirá las URLs my-app://* con nuestra aplicación:

src-tauri/src/lib.rs
use tauri_plugin_deep_link::DeepLinkExt;
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
tauri::Builder::default()
.plugin(tauri_plugin_deep_link::init())
.setup(|app| {
#[cfg(desktop)]
app.deep_link().register("my-app")?;
Ok(())
})
.run(tauri::generate_context!())
.expect("error while running tauri application");
}

Hay algunas advertencias al probar deep links para tu aplicación.

Los deep links solo se activan para aplicaciones instaladas en escritorio. En Linux y Windows puedes eludir esto usando la función de Rust register_all, la cual registra todos los esquemas configurados para activar el ejecutable actual:

src-tauri/src/lib.rs
use tauri_plugin_deep_link::DeepLinkExt;
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
tauri::Builder::default()
.plugin(tauri_plugin_deep_link::init())
.setup(|app| {
#[cfg(any(windows, target_os = "linux"))]
{
use tauri_plugin_deep_link::DeepLinkExt;
app.deep_link().register_all()?;
}
Ok(())
})
.run(tauri::generate_context!())
.expect("error while running tauri application");
}

Para activar un deep link en Windows puedes abrir <scheme>://url en el navegador o ejecutar el siguiente comando en la terminal:

Ventana de terminal
start <scheme>://url

Para activar un deep link en Linux puedes abrir <scheme>://url en el navegador o ejecutar xdg-open en la terminal:

Ventana de terminal
xdg-open <scheme>://url

Para activar un app link en iOS puedes abrir la URL https://<host>/path en el navegador. Para simuladores puedes aprovechar la CLI de simctl para abrir directamente un enlace desde la terminal:

Ventana de terminal
xcrun simctl openurl booted https://<host>/path

Para activar un app link en Android puedes abrir la URL https://<host>/path en el navegador. Para emuladores puedes aprovechar la CLI de adb para abrir directamente un enlace desde la terminal:

Ventana de terminal
adb shell am start -a android.intent.action.VIEW -d https://<host>/path <bundle-identifier>

De forma predeterminada, todos los comandos y alcances (scopes) potencialmente peligrosos del plugin están bloqueados y no se puede acceder a ellos. Debes modificar los permisos en tu configuración de capabilities para habilitarlos.

Consulta la Visión General de Capacidades para obtener más información y la guía paso a paso para usar permisos de plugins.

src-tauri/capabilities/default.json
{
"$schema": "../gen/schemas/mobile-schema.json",
"identifier": "mobile-capability",
"windows": ["main"],
"platforms": ["iOS", "android"],
"permissions": [
// Usually you will need core:event:default to listen to the deep-link event
"core:event:default",
"deep-link:default"
]
}

Permiso Predeterminado

Permite leer el deep link abierto mediante el comando get_current

Este conjunto de permisos predeterminado incluye lo siguiente:

  • allow-get-current

Tabla de Permisos

Identificador Descripción

deep-link:allow-get-current

Habilita el comando get_current sin ningún ámbito preconfigurado.

deep-link:deny-get-current

Deniega el comando get_current sin ningún ámbito preconfigurado.

deep-link:allow-is-registered

Habilita el comando is_registered sin ningún ámbito preconfigurado.

deep-link:deny-is-registered

Deniega el comando is_registered sin ningún ámbito preconfigurado.

deep-link:allow-register

Habilita el comando register sin ningún ámbito preconfigurado.

deep-link:deny-register

Deniega el comando register sin ningún ámbito preconfigurado.

deep-link:allow-unregister

Habilita el comando unregister sin ningún ámbito preconfigurado.

deep-link:deny-unregister

Deniega el comando unregister sin ningún ámbito preconfigurado.


© 2026 Colaboradores de Tauri. CC-BY / MIT