-
Declara scheme en app.config.ts antes de enviar cualquier deep link: Los esquemas personalizados son la ruta de desarrollo más rápida y la columna vertebral de redirección de OAuth - sin un esquema registrado, createURL y los binarios de la tienda no pueden reclamar URLs de entrada.
-
Prefiere enlaces HTTPS verificados para marketing de consumidor: Los enlaces universales y App Links se abren sin hojas de desambiguación - los esquemas personalizados están bien para desarrollo y OAuth, pero frustran campañas de correo electrónico cuando otra aplicación registra el mismo esquema.
-
Reconstruye los binarios nativos después de cambios de esquema o dominio: Los derechos e filtros de intención se cocinan en prebuild - Las actualizaciones OTA no pueden agregar filtros de intención associatedDomains o autoVerify.
-
Usa Linking.createURL para enlaces salientes - nunca codifiques myapp://: Los sabores, prefijos y peculiaridades de barra triple de Android se manejan centralmente - las cadenas codificadas se rompen entre staging y producción.
-
Deja que Expo Router asigne rutas de archivo a URLs cuando uses enrutamiento basado en archivos: app/orders/[id].tsx ya maneja /orders/:id - los analizadores manuales duplicados se desvían de los archivos de ruta y rutas tipadas.
-
Centraliza el manejo de URL de entrada en un hook raíz: El inicio en frío (getInitialURL), el inicio caliente (addEventListener), taps de push y la primera apertura diferida deben converger en una función de navegación validada - dispersar causa pushes dobles.
-
Limita la navegación de deep link en authReady y finalización de incorporación: Las pantallas protegidas que se montan antes de restaurar la sesión muestran datos y pierden URLs de retorno - encola la intención hasta que se completa el bootstrap.
-
Valida los parámetros de ruta con Zod en el límite de vinculación: Los deep links son entradas no confiables - los valores id malformados deben router.replace("/") o una pantalla de error dedicada, no lanzar durante el renderizado.
-
Trata los parámetros de consulta como públicos - nunca pongas secretos en URLs: Las claves de consulta token, email y code se registran en análisis, registros y encabezados referentes - intercambia códigos de un solo uso en el servidor después de la navegación.
-
Maneja el inicio en frío y caliente explícitamente: getInitialURL solo pierde taps de fondo; las configuraciones solo con listeners pierden lanzamientos en estado de muerte - implementa ambos con limpieza y guardias de duplicados.
-
Usa router.replace para enlaces mágicos y restablecimiento de contraseña: Los usuarios no deben navegar hacia atrás en pilas pre-autenticación - los de una sola vez transaccionales reemplazan; el contenido navegable empuja.
-
Haz las rutas idempotentes: Hacer clic en el mismo enlace orders/42 dos veces no debe corromper la profundidad de la pila - router.push a la misma pantalla puede duplicarse; considera router.navigate o deduplicar por referencia de ruta.
-
Aloja apple-app-site-association sin redirecciones y application/json: iOS rechaza AASA redirigido o envuelto en HTML - sirve 200 en rutas apex y /.well-known/ con TLS válido.
-
Aloja assetlinks.json con huellas digitales SHA-256 de Play App Signing: Las huellas digitales de clave de carga por sí solas fallan la verificación en compilaciones distribuidas en Play - copia el certificado de Play Console - Integridad de la aplicación.
-
Estrecha pathPrefix y AASA paths - no reclames /: Las rutas demasiado amplias secuestran URLs de blog y administrador en la aplicación - usa prefijos explícitos y exclusiones NOT.
-
Ejecuta adb shell pm get-app-links en compilaciones de QA de Android: El estado de verificación es determinista - legacy_failure antes del tap del dispositivo ahorra horas de adivinanzas.
-
Prueba enlaces universales en TestFlight y pistas internas - no solo simuladores: iOS almacena en caché AASA en el dispositivo; el paso del simulador - la alternativa de Safari del dispositivo es un falso positivo común.
-
Mata la aplicación entre casos de prueba de inicio en frío: QA solo de inicio caliente pierde el segmento de bloqueo más alto - Maestro stopApp: true y kill-before-tap manual son obligatorios.
-
Pon los datos de enrutamiento en la carga útil de push data - no solo título/cuerpo: Los manejadores de tap de notificación leen content.data - analiza tipos discriminados y valida antes de router.push.
-
Empareja el inicio en frío de push con getLastNotificationResponseAsync: El mismo patrón que getInitialURL - el manejo de push solo con listeners falla cuando la aplicación fue asesinada.
-
Planifica deep links diferidos sin asumir referencia de instalación de iOS: Android Install Referrer más IDs de clic del lado del servidor son el patrón de privacidad duradera - Los SDK MMP requieren ATT y divulgaciones de privacidad cuando se realiza un seguimiento entre aplicaciones.
-
Ofrece una alternativa web y un CTA de continuación manual cuando falla la coincidencia diferida: 30-50% de atribución diferida se pierde - cae en un valor predeterminado sensible con "¿Continuar tu oferta?" en lugar de una pantalla de inicio en blanco.
-
Verifica con CI AASA y assetlinks.json alojados en cada implementación web: El alojamiento JSON se rompe silenciosamente cuando el marketing cambia las reglas de CDN - script fetch + JSON.parse antes del lanzamiento nativo.
-
Prueba de contrato del análisis de URL en Jest - Maestro no puede cubrir todas las entradas malformadas: Las pruebas unitarias para Linking.parse - asignación de ruta son económicas y bloquean %20, IDs vacíos y intentos de inyección.
-
Documenta esquemas, dominios y matriz de pruebas en el manual de lanzamiento: Los deep links tocan app.config.ts, CDN, cargas útiles de push y autenticación - vincula las filas de la matriz P0 a los propietarios de la lista de verificación de lanzamiento para que la vinculación no sea una idea tardía en el día del envío.
Versiones de Stack: Esta página fue escrita para React 19.2.3, React Native 0.86.0 y Expo SDK 57 (expo ~57.0.4).