Saltar al contenido principal

Descripción general

El deep linking dirige a los usuarios a una pantalla específica en su aplicación cuando tocan un enlace, ya sea desde un correo electrónico, SMS, sitio web, notificación push o mensaje in-app. Si la aplicación no está instalada, el sistema operativo puede redirigir a los usuarios a la tienda de aplicaciones o a una página web de respaldo. Esta guía cubre:
  • Tipos de deep links y cuándo usar cada uno
  • Configuración de plataforma para Android e iOS
  • Manejo de deep links en su aplicación con el SDK de OneSignal
  • Comportamiento por canal para push, correo electrónico y mensajes in-app
Para la configuración general de URL y enlaces (URLs de lanzamiento, parámetros UTM, URLs dinámicas, seguimiento de enlaces), consulte URLs, enlaces y deep links.

Requisitos previos

Antes de configurar deep links, necesita:
  • Una cuenta de OneSignal con una aplicación configurada
  • El SDK de OneSignal instalado en su aplicación móvil
  • Un dominio que controle, alojado en HTTPS, para Universal Links o App Links
  • Acceso al código fuente y la configuración de compilación de su aplicación (Xcode para iOS, Android Studio para Android)

Existen tres mecanismos comunes de deep linking. Cada uno tiene un comportamiento diferente según si la aplicación está instalada.
TipoPlataformaFormatoAplicación no instalada
Universal LinksiOS 9+https://yourdomain.com/pathAbre la URL en Safari
App LinksAndroid 6.0+https://yourdomain.com/pathAbre la URL en el navegador
Esquemas URI personalizadosiOS y Androidmyapp://pathFalla silenciosamente o muestra un error
Recomendación: Use Universal Links (iOS) y App Links (Android) para la experiencia más confiable. Utilizan URLs https:// estándar, funcionan en todos los canales (push, correo electrónico, SMS) y proporcionan comportamiento de respaldo cuando la aplicación no está instalada. Los esquemas URI personalizados (myapp://) son más simples de configurar, pero no proporcionan comportamiento de respaldo y puede que no funcionen en todos los contextos (por ejemplo, clientes de correo electrónico).
Universal Links y App Links requieren alojar un archivo de verificación en su dominio. Sin este archivo, el SO trata el enlace como una URL web normal.

Use el App Links Assistant de Android Studio para generar la configuración necesaria.

Configurar filtros de intent

Añada un filtro de intent a la Activity que debe manejar el deep link:
<activity android:name=".DeepLinkActivity" 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="yourdomain.com" />
  </intent-filter>
</activity>

Manejar el intent entrante

Intent appLinkIntent = getIntent();
String appLinkAction = appLinkIntent.getAction();
Uri appLinkData = appLinkIntent.getData();
Genere el archivo assetlinks.json usando el App Links Assistant de Android Studio y alójelo en:
https://yourdomain.com/.well-known/assetlinks.json
Consulte la documentación de Google Verify App Links para el formato completo del archivo y los pasos de verificación.
Los Universal Links de Apple abren su aplicación cuando un usuario toca una URL https:// coincidente. Para casos de uso más simples donde se garantiza que la aplicación está instalada, puede usar Esquemas de URL en su lugar.

Habilitar Associated Domains

  1. En Xcode, seleccione su target → Signing & Capabilities → agregue Associated Domains
  2. Añada su dominio: applinks:yourdomain.com
func application(_ application: UIApplication,
                 continue userActivity: NSUserActivity,
                 restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
  guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
        let url = userActivity.webpageURL else {
    return false
  }
  // Route to the correct screen based on the URL path
  return true
}

Alojar el archivo Apple App Site Association

Cree un archivo apple-app-site-association (AASA) y alójelo en:
https://yourdomain.com/.well-known/apple-app-site-association
Reemplace TEAMID con su Apple Team ID y com.example.app con su identificador de bundle:
{
  "applinks": {
    "apps": [],
    "details": [{
      "appID": "TEAMID.com.example.app",
      "paths": ["/path/*", "/another-path"]
    }]
  }
}
Consulte la documentación de Apple Supporting Associated Domains para la especificación completa.

Comportamiento de la URL de lanzamiento en iOS

El SDK de iOS de OneSignal usa openURL para manejar la URL de lanzamiento (propiedad url). Esto hace que el enlace se abra primero en el navegador y luego redirige de vuelta a la aplicación, lo que puede ser una mala experiencia de usuario. Para evitar esto, use uno de estos enfoques:
  1. Use data en lugar de url en el payload de la API y maneje el deep link en su Listener de clic de notificación push
  2. Suprima las URLs de lanzamiento añadiendo OneSignal_suppress_launch_urls a su Info.plist como Boolean con valor YES, luego maneje toda la navegación en el listener de clic
El enfoque 1 (usar data + listener de clic) es recomendado porque le da control total sobre la navegación sin depender del SO para resolver la URL.

La forma más confiable de manejar deep links de mensajes de OneSignal es usar los listeners de clic del SDK en lugar de depender de la resolución de enlaces a nivel del SO. Esto le da control total sobre la navegación en su aplicación.

Listener de clic de notificación push

Use addClickListener para interceptar clics en notificaciones y enrutar al usuario según la URL del deep link o datos adicionales:
OneSignal.Notifications.addClickListener { event ->
  val url = event.notification.launchURL
  val data = event.notification.additionalData
  // Route to the correct screen based on url or data
}
Para la referencia completa de la API, incluidos Java, Objective-C y Cordova/Ionic, consulte addClickListener() Push.

Listener de clic de mensaje in-app

Use el listener de clic de mensaje in-app para manejar deep links de botones y acciones de mensajes in-app:
OneSignal.InAppMessages.addClickListener { event ->
  val actionId = event.result.actionId
  // Route based on the action ID (your deep link URI)
}
Para la referencia completa de la API, consulte addClickListener() In-App.

Notificaciones push

Incluya el deep link de una de estas dos formas:
MétodoPropiedad de APIComportamiento
URL de lanzamientourl (o app_url solo para móvil)El SO abre la URL directamente. En iOS, esto abre el navegador primero a menos que se suprima.
Datos adicionales (recomendado)dataLa URL se pasa a su listener de clic. Usted controla la navegación completamente.

Comportamiento por plataforma

  • Android: Abre la Activity coincidente directamente a través de App Links
  • iOS: Abre Safari, luego la aplicación (a menos que suprima las URLs de lanzamiento y maneje la navegación en el listener de clic)
Consulte URLs, enlaces y deep links para detalles sobre url, web_url y app_url.

Correos electrónicos

De forma predeterminada, OneSignal reescribe los enlaces de correo electrónico para el seguimiento de clics. Esto cambia la URL, lo que rompe el deep linking porque el SO ya no reconoce el dominio como coincidente con el Associated Domain de su aplicación. Para preservar los deep links, deshabilite el seguimiento de clics usando uno de estos métodos:
  • Panel de control: Desmarque Track link clicks en el editor de correo electrónico
  • API: Establezca disable_email_click_tracking: true
  • Por enlace: Use el filtro Liquid {{ 'https://yourdomain.com/path' | do_not_track_link }} para deshabilitar el seguimiento en enlaces individuales mientras lo mantiene habilitado para otros
Editor de correo electrónico de OneSignal con la casilla Track link clicks desmarcada
Deshabilitar el seguimiento de clics significa que pierde las métricas de clics en los Informes de correo electrónico. Considere usar exclusiones de seguimiento por enlace para preservar los análisis en URLs que no son deep links.
EscenarioResultado
iOS + Safari + Universal Link + Seguimiento deshabilitadoAbre la aplicación directamente
iOS + Safari + Universal Link + Seguimiento habilitadoAbre Safari, solicita abrir la aplicación
iOS + cliente de correo no-Safari + Universal LinkAbre App Store si la aplicación no está instalada
Android + App Link + Seguimiento deshabilitadoAbre la aplicación directamente
Android + App Link + Seguimiento habilitadoAbre el navegador primero, luego la aplicación

Mensajes in-app

Los deep links en mensajes in-app usan el patrón de listener de clic. Usted establece un identificador de acción personalizado en el editor de mensajes y luego lo maneja en el código de su aplicación.

Editor de arrastrar y soltar

  1. Añada un botón o elemento clicable
  2. Establezca la acción de clic como Custom Action ID
  3. Ingrese su URI de deep link como Action Name (por ejemplo, https://yourdomain.com/promo o myapp://promo)

Editor HTML

Use el método openUrl en la biblioteca JS In-App para activar deep links desde HTML personalizado.

Manejar el clic

Use el listener de clic de mensaje in-app para interceptar la acción y navegar al usuario en su aplicación.

Android

Use adb para probar App Links sin enviar una notificación:
adb shell am start -a android.intent.action.VIEW \
  -d "https://yourdomain.com/path" \
  com.your.package
Verifique que su assetlinks.json sea accesible:
curl -I https://yourdomain.com/.well-known/assetlinks.json

iOS

Use la herramienta de validación de Associated Domains de Apple para verificar su archivo AASA. También puede probar Universal Links:
  1. Pegando el enlace en la aplicación Notas
  2. Manteniendo presionado el enlace para confirmar que aparece la opción “Abrir en [App]”
  3. Tocando el enlace para verificar que abre su aplicación
Los Universal Links no funcionan cuando se escriben directamente en la barra de direcciones de Safari — deben tocarse desde otra aplicación (Notas, Correo, Mensajes, etc.).

Mensajes de prueba de OneSignal

  1. Envíe un push de prueba desde el panel de control de OneSignal con una URL de deep link como URL de lanzamiento o en Datos adicionales
  2. Verifique que la notificación abra la pantalla correcta en su aplicación
  3. Revise los registros de su listener de clic para confirmar que se recibió la URL o los datos

Resolución de problemas

Este es el problema más común. Posibles causas:
  • Archivo AASA no alojado correctamente — Verifique que esté en https://yourdomain.com/.well-known/apple-app-site-association con Content-Type: application/json y sin redirecciones
  • Associated Domains no configurado — Verifique en Xcode → Signing & Capabilities → Associated Domains que incluye applinks:yourdomain.com
  • Comportamiento de la URL de lanzamiento — El SDK de iOS de OneSignal usa openURL para la propiedad url, lo que activa el comportamiento de apertura con el navegador primero. Use data + listener de clic o suprima las URLs de lanzamiento
  • Pruebas en Safari — Los Universal Links no se activan desde la barra de direcciones de Safari. Pruebe desde Notas, Correo u otra aplicación.
  • autoVerify faltante — Asegúrese de que su filtro de intent incluya android:autoVerify="true"
  • assetlinks.json no encontrado — Verifique que el archivo esté en https://yourdomain.com/.well-known/assetlinks.json y devuelva HTTP 200
  • Discrepancia de huella SHA256 — La huella en assetlinks.json debe coincidir con el certificado de firma de su aplicación. Las compilaciones de depuración y de lanzamiento usan certificados diferentes.
El seguimiento de clics de correo electrónico reescribe las URLs, rompiendo la verificación del dominio. Deshabilite el seguimiento de clics para correos electrónicos que contengan deep links.
  • Verifique que su listener de clic esté registrado temprano en el ciclo de vida de la aplicación (por ejemplo, en Application.onCreate() o AppDelegate.didFinishLaunchingWithOptions)
  • Compruebe que la URL o el ID de acción coincida con lo que espera su lógica de enrutamiento
  • En iOS, confirme que no está confiando en url sin suprimir las URLs de lanzamiento — el navegador puede consumir el enlace antes de que se active su listener

Preguntas frecuentes

¿Qué sucede si la aplicación no está instalada?

Con Universal Links (iOS), la URL se abre en Safari como una página web normal. Con App Links (Android), la URL se abre en el navegador predeterminado. En ambos casos, puede configurar su página web para redirigir a la tienda de aplicaciones apropiada. Los esquemas URI personalizados (myapp://) fallan silenciosamente o muestran un error si la aplicación no está instalada.

¿Debo usar URL de lanzamiento o Datos adicionales para deep linking?

Los Datos adicionales (data) son recomendados para deep links móviles porque le dan control total sobre la navegación a través del listener de clic. La URL de lanzamiento (url) es más simple pero tiene limitaciones en iOS (redirección del navegador) y no permite lógica de enrutamiento personalizada. Sí. Use URLs dinámicas con sintaxis Liquid para inyectar propiedades del usuario, etiquetas o datos personalizados en sus URLs de deep link. Por ejemplo: https://yourdomain.com/profile/{{subscription.external_id}}. Sí. Establezca su esquema personalizado (por ejemplo, myapp://screen) como valor de URL de lanzamiento o Datos adicionales. Los esquemas personalizados funcionan bien para push y mensajes in-app, pero puede que no funcionen en clientes de correo electrónico. Tampoco proporcionan respaldo si la aplicación no está instalada. Sí. Al configurar un paso de mensaje en un Journey, establezca la URL de lanzamiento o los Datos adicionales con su deep link. El comportamiento es el mismo que en un push o mensaje in-app independiente.

URLs, enlaces y deep links

URLs de lanzamiento, parámetros UTM, URLs dinámicas y configuración de seguimiento de enlaces.

Referencia del SDK móvil

Referencia completa de la API para listeners de clic y manejo de eventos de notificación.

In-App Click Actions

Configure acciones de clic para botones y elementos de mensajes in-app.

Configuración de push móvil

Configuración de notificaciones push específica de plataforma para Android e iOS.