Solución de problemas relacionados con la vinculación en profundidad
Esta página trata sobre problemas comunes relacionados con la vinculación en profundidad en iOS y cómo diagnosticarlos. Para obtener ayuda sobre cómo elegir el tipo de enlace adecuado, consulta la guía de vinculación en profundidad de iOS. Para obtener más información sobre la implementación, consulta Vinculación en profundidad.
El vínculo profundo del esquema personalizado no abre la vista correcta.
Si un vínculo profundo personalizado (por ejemplo, myapp://products/123) abre tu aplicación pero no te lleva a la pantalla deseada:
- Verifica que el programa tenga registro. En Xcode, comprueba que tu esquema aparece en la lista bajo
CFBundleURLTypesenInfo.plist. - Comprueba tu controlador. Establece un punto de interrupción en
application(_:open:options:)para confirmar que se está llamando e inspecciona elurlparámetro . - Prueba el enlace de forma independiente. Ejecuta el siguiente comando desde Terminal para probar el vínculo profundo fuera de Braze:
1
xcrun simctl openurl booted "myapp://products/123"Si el enlace no funciona aquí, el problema está en el manejo de la URL de tu aplicación, no en Braze.
- Comprueba el formato de la URL. Verifica que la URL de tu campaña coincida con lo que espera tu controlador. Entre los errores más comunes se incluyen la falta de componentes de ruta o el uso incorrecto de mayúsculas y minúsculas.
El enlace universal se abre en Safari en lugar de en la aplicación.
Si un enlace universal (por ejemplo, https://myapp.com/products/123) se abre en Safari en lugar de en tu aplicación:
Verifica el derecho a los dominios asociados.
En Xcode, ve al objetivo de tu aplicación > Capacidades& de firma y comprueba queapplinks:yourdomain.comaparece en el listado de Dominios asociados.
Validar el archivo AASA
Tu archivo de asociación de sitios de aplicaciones de Apple (AASA) debe estar alojado en una de estas ubicaciones:
https://yourdomain.com/.well-known/apple-app-site-associationhttps://yourdomain.com/apple-app-site-association
Verifica lo siguiente:
- El archivo se sirve a través de HTTPS con un certificado válido.
- El
Content-Typeesapplication/json. - El tamaño del archivo es inferior a 128 KB.
- Coincide
appIDcon tu ID de equipo y tu ID de paquete (por ejemplo,ABCDE12345.com.example.myapp). - La matriz
pathscomponentso incluye los patrones de URL que esperas.
Puedes validar tu AASA utilizando la herramienta de validación de búsqueda de Apple o ejecutando:
1
swcutil dl -d yourdomain.com
Comprueba el AppDelegate
Verifica queapplication(_:continue:restorationHandler:) esté implementado en tuAppDelegate y que gestione correctamente NSUserActivityel :
1
2
3
4
5
6
7
8
9
10
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let url = userActivity.webpageURL else {
return false
}
// Handle the URL
return true
}
Verifica la configuración del SDK de Braze.
Si utilizas enlaces universales desde notificaciones push, mensajes dentro de la aplicación o tarjetas de contenido entregadas por Braze, confirma queforwardUniversalLinks está habilitado:
1
2
let configuration = Braze.Configuration(apiKey: "<BRAZE_API_KEY>", endpoint: "<BRAZE_ENDPOINT>")
configuration.forwardUniversalLinks = true
El reenvío universal de enlaces requiere acceso a los derechos de la aplicación. Cuando se ejecuta en un simulador, estos derechos no están disponibles directamente. Para realizar pruebas en un simulador, añade el.entitlementsarchivo a la fase de compilación «Copiar recursos del paquete».
Comprueba si hay algún problema con la pulsación prolongada.
Si mantienes pulsado un enlace universal y seleccionas Abrir, iOS puede «romper» la asociación del enlace universal para ese dominio. Este es un comportamiento conocido de iOS. Para restablecerlo, mantén pulsado el enlace de nuevo y selecciona Abrir en [nombre de la aplicación].
El vínculo profundo del correo electrónico no abre la aplicación.
Los enlaces de correo electrónico pasan por el sistema de seguimiento de clics de tu ESP, que envuelve los enlaces en un dominio de seguimiento (por ejemplo, https://click.yourdomain.com/...). Para que los enlaces universales funcionen desde el correo electrónico, debes configurar el archivo AASA en tu dominio de seguimiento de clics, no solo en tu dominio principal.
Verificar el dominio de seguimiento de clics AASA
- Identifica tu dominio de seguimiento de clics en la configuración de tu ESP (SendGrid, SparkPost o Amazon SES).
- Aloja el archivo AASA en
https://your-click-tracking-domain/.well-known/apple-app-site-association. - Asegúrate de que el archivo AASA del dominio de seguimiento de clics incluya los mismos patrones
appIDde ruta válidos.
Para obtener instrucciones de configuración específicas para ESP, consulta Enlaces universales y Enlaces a aplicaciones.
Comprueba la cadena de redireccionamiento.
Algunos ESP realizan un redireccionamiento desde la URL de seguimiento de clics a tu URL final. Los enlaces universales solo funcionan si iOS reconoce el dominio inicial (el dominio de seguimiento de clics) como asociado a tu aplicación. Si el redireccionamiento omite la comprobación AASA, el enlace se abre en Safari.
Para probar:
- Envíate un correo electrónico de prueba.
- Mantén pulsado el enlace y comprueba la URL: esta es la URL de seguimiento de clics.
- Verifica que este dominio tenga un archivo AASA válido.
Los vínculos profundos funcionan desde notificaciones push, pero no desde mensajes dentro de la aplicación (o viceversa).
Comprueba BrazeDelegate.
Si implementas BrazeDelegate.braze(_:shouldOpenURL:), comprueba que gestiona los enlaces de forma coherente en todos los canales. Elcontextparámetro incluye el canal de origen. Busca la lógica condicional que pueda filtrar accidentalmente enlaces de canales específicos.
Habilitar el registro detallado
Habilita el registro detallado y reproduce el problema. Busca la entradaOpening del registro:
1
2
3
4
Opening '<URL>':
- channel: <SOURCE_CHANNEL>
- useWebView: <true/false>
- isUniversalLink: <true/false>
Compara la salida del registro del canal que funciona con la del canal que no funciona. Las diferencias enuseWebView oisUniversalLink indican cómo el SDK interpreta el enlace de manera diferente.
Comprueba si hay delegados de visualización personalizados.
Si utilizas un delegado de visualización de mensajes dentro de la aplicación personalizado o un controlador de clics de tarjetas de contenido, comprueba que transmite correctamente los eventos de enlace al SDK de Braze para su gestión.
«Abrir URL Web dentro de la aplicación» muestra una página en blanco o dañada.
Si al seleccionar «Abrir URL web dentro de la aplicación» aparece una vista web en blanco o dañada:
- Comprueba que la URL utiliza HTTPS. La WebView del SDK requiere URL compatibles con ATS. Los enlaces HTTP fallan silenciosamente.
- Comprueba los encabezados de la política de seguridad de contenidos. Si la página web de destino establece
X-Frame-Options: DENYo una restricciónContent-Security-Policy, bloquea la representación en una WebView. - Comprueba si hay redireccionamientos a esquemas personalizados. Si la página web redirige a un esquema personalizado (por ejemplo,
myapp://), WebView no puede gestionarlo. - Prueba la URL en Safari. Si la página no se carga en Safari en el dispositivo, tampoco se cargará en WebView.
Solución de problemas con Braze
Si utilizas Branch como proveedor de enlaces:
Verifica las rutas de BrazeDelegate a Branch.
DebesBrazeDelegate interceptar los enlaces de Branch y pasarlos al SDK de Branch. Verifica lo siguiente:
1
2
3
4
5
6
7
8
9
func braze(_ braze: Braze, shouldOpenURL context: Braze.URLContext) -> Bool {
if let host = context.url.host, host.contains("app.link") {
// Route to Branch SDK
Branch.getInstance.handleDeepLink(context.url)
return false
}
// Let Braze handle other links
return true
}
SishouldOpenURLse devuelven enlacestrue de Branch, Braze los gestiona directamente en lugar de redirigirlos a Branch.
Comprueba el dominio del enlace de la sucursal.
Verifica que el dominio de Branch en tuBrazeDelegate coincida con tu dominio de enlace de Branch real. Branch utiliza varios formatos de dominio:
yourapp.app.link(predeterminado)yourapp-alternate.app.link(alternativo)- Dominios personalizados (si están configurados en el panel de control de Branch)
Habilitar el registro de ambos SDK
Para diagnosticar dónde se rompe el eslabón de la cadena:
- Habilita el registro detallado de Braze: busca
Opening '<URL>':entradas para verificar que el SDK haya recibido el enlace. - Habilita el modo de prueba de Branch: comprueba el panel de control de Branch para ver los eventos de clics en los enlaces.
- Habilita el registro detallado de Braze. Busca
Opening '<URL>':entradas para verificar que el SDK recibió el enlace. - Habilita el modo de prueba de Branch. Comprueba el panel de Branch para ver los eventos de clics en los enlaces.
- Si Braze registra el enlace, pero Branch no detecta ningún clic, es probable que el problema esté en la lógica
BrazeDelegatede enrutamiento.
Comprueba la configuración del panel de la sucursal.
En el panel de control de la sucursal, verifica lo siguiente:
- El ID del paquete y el ID del equipo de tu aplicación coinciden con tu proyecto Xcode.
- Tus dominios asociados incluyen el dominio del enlace de la sucursal.
- Tu archivo AASA de Branch es válido (Branch lo aloja automáticamente en
app.linklos dominios).
Prueba los enlaces de la rama de forma independiente.
Prueba el enlace Branch fuera de Braze para aislar el problema:
- Abre el enlace Branch en Safari en tu dispositivo. Si no se abre la aplicación, el problema está en tu configuración de Branch o AASA, no en Braze.
- Pega el enlace de Branch en la aplicación Notas y pulsa sobre él. Los enlaces universales funcionan de forma más fiable desde Notes que desde la barra de direcciones de Safari.
Consejos generales para la depuración
Utilizar registro detallado
Habilita el registro detallado para ver exactamente cómo procesa los enlaces el SDK. Entradas clave que debes buscar:
| Entrada de registro | Qué significa |
|---|---|
Opening '<URL>': - channel: notification |
El SDK está procesando un enlace desde una notificación push. |
Opening '<URL>': - channel: inAppMessage |
El SDK está procesando un enlace desde un mensaje dentro de la aplicación. |
Opening '<URL>': - channel: contentCard |
El SDK está procesando un enlace desde una tarjeta de contenido. |
useWebView: true |
El SDK abre la URL en la vista web integrada en la aplicación. |
isUniversalLink: true |
El SDK identificó la URL como un enlace universal. |
Para obtener más información sobre cómo leer estos registros, consulta Lectura de registros detallados.
Prueba los enlaces de forma aislada.
Antes de realizar pruebas a través de Braze, comprueba que tu vínculo profundo o enlace universal funciona por sí solo:
- Esquema personalizado: Ejecuta
xcrun simctl openurl booted "myapp://path"en Terminal. - Enlace universal: Pega la URL en la aplicación Notas de un dispositivo físico y pulsa sobre ella. No realices pruebas desde la barra de direcciones de Safari, ya que iOS trata las URL escritas de forma diferente a los enlaces pulsados.
- Enlace de la sucursal: Abre el enlace Branch desde la aplicación Notas en un dispositivo.
Prueba en un dispositivo físico
Los enlaces universales tienen una compatibilidad limitada en el simulador de iOS. Prueba siempre en un dispositivo físico para obtener resultados precisos. Si tienes que realizar pruebas en un simulador, añade el.entitlementsarchivo a la fase de compilación «Copiar recursos del paquete».
Editar esta página en GitHub