# Aplicaciones: sitios web y apps móviles

## Para qué sirve

**Observar › Aplicaciones** mide la experiencia de las personas que usan tu sitio web o tu app móvil: cuánto tarda en abrir cada pantalla, qué errores ven, qué pedidos al servidor fallan o se demoran, si la app se cierra sola y qué hacen (turnos reservados, pagos, etc.). Se conoce como *experiencia de usuarios reales*.

Para medirlo se instala un **SDK** (una librería chica) en el sitio o la app. Esta página explica el alta en el portal; la instalación del SDK está en una página por plataforma:

| Plataforma | Página |
|---|---|
| Web | [SDK web](https://lymen.app/docs/instalacion/sdk-web/) |
| Android | [SDK Android](https://lymen.app/docs/instalacion/sdk-android/) |
| iOS | [SDK iOS](https://lymen.app/docs/instalacion/sdk-ios/) |
| React Native | [SDK React Native](https://lymen.app/docs/instalacion/sdk-react-native/) |

## Cuándo usarlo

- Querés saber si tu sitio de turnos o tu app anda lento para tus pacientes o clientes.
- Querés ver errores del navegador o cierres de la app antes de que te los reporten.
- Querés unir un pedido lento del navegador o del celular con la traza de tu servidor (ver [Instrumentación](https://lymen.app/docs/instalacion/instrumentacion-aplicaciones/)).

## Alta paso a paso

Tocá **Aplicaciones › Agregar aplicación** (o entrá desde **Agregar datos › Sitios web y apps**). Son tres pasos.

### Paso 1: ¿Qué querés medir?

1. Elegí el tipo: **Web**, **Android**, **iOS** o **React Native**.
2. Escribí el **Nombre** y la **dirección o paquete** (tabla de campos más abajo).
3. Tocá **Crear y seguir**.

### Paso 2: Instalá Lymen

El portal arma el código listo para copiar, con tu clave. Copialo y seguí las instrucciones de la plataforma: pegarlo en el `<head>` del sitio, o sumar el SDK al proyecto de la app e iniciarlo. Después publicá o reiniciá la aplicación, y abrila una vez. Tocá **Ya lo instalé**.

### Paso 3: Verificamos que llegue información

El portal espera el primer dato (suele tardar menos de un minuto). Abrí el sitio en el navegador, o la app en un teléfono, y navegá una pantalla. Cuando llega, ves **¡Llegó el primer dato!**.

## Campos del alta

| Campo | Para qué sirve | Por defecto | Valores válidos | Impacto de cambiarlo |
|---|---|---|---|---|
| **Tipo / Plataforma** | Qué se mide. | Web | Web, Android, iOS, React Native | No se cambia después de crearlo: el código y los datos dependen de la plataforma. |
| **Nombre** | Cómo lo ves en la lista. | — | Hasta 80 caracteres, sin `<`, `>`, `{`, `}`, `$` ni `\`. | Ninguno. |
| **Dirección del sitio** (solo Web) | Desde dónde se abre. Lymen **solo acepta datos que vengan de estas direcciones**. | — | Hasta 20, repetidas no; con `https://` y sin ruta ni barra final (`https://turnos.clinicax.com`). `http` solo para pruebas en tu propia máquina. | **Seguridad.** Una dirección de más permite que otro sitio mande datos con tu clave pública. Una de menos hace que se rechacen los datos de ese sitio. |
| **Paquete de la app** (Android, iOS) | El identificador de la app en la tienda (`applicationId` o *bundle id*). | — | Hasta 150 caracteres. | Sirve para reconocer la app. |
| **Paquete Android** y **Bundle iOS** (React Native) | Los dos identificadores, ambos opcionales. | Vacíos | Hasta 150 caracteres. | Una sola app React Native recibe de Android y de iOS con la **misma clave**. |

## Editar una aplicación

En la lista, cada aplicación tiene un diálogo de edición con estos campos:

| Campo | Para qué sirve | Por defecto | Valores válidos | Impacto de cambiarlo |
|---|---|---|---|---|
| **Nombre del servicio** | Cómo aparece en Servicios y en Trazas. | — | Letras, números, punto, guion y guion bajo, hasta 100 (por ejemplo `web-turnos`). | Cambia cómo la encontrás en otras pantallas. Evitá cambiarlo si ya armaste reglas o dashboards con ese nombre. |
| **Qué parte de las visitas se mide** | Muestreo: porcentaje de sesiones que se miden. | 100 % | De 1 a 100 % | **Costo y visibilidad.** Con 100 % se mide cada visita. Con mucho tráfico, 25 % alcanza para ver tendencias y baja el costo; pero un error poco frecuente puede no aparecer. La decisión se toma al empezar cada sesión: una sesión entra completa o no entra. Lo que pongas acá **manda sobre lo que escribas en el SDK**. |
| **Unir con lo que pasa en tu servidor** | Direcciones de tus APIs a las que se les manda la marca que une el pedido del navegador o la app con la traza del servidor. | Vacío | Hasta 20, con el mismo formato que las direcciones del sitio. | Solo a estas direcciones se les agrega la marca. Tus APIs tienen que aceptarla (CORS en web). Se suma a lo que pongas en el SDK. |
| **Registrar los clics** | Guarda qué botón o enlace se tocó. | Apagado | Encendido / apagado | **Privacidad.** Se guarda un identificador del elemento (nunca el texto ni lo escrito). Ayuda a entender qué hizo la persona antes de un error. |
| **Recibir datos** | Pausa o activa la aplicación. | Encendido | Encendido / apagado | Pausada, Lymen **no acepta datos** de esta aplicación aunque tenga el código puesto. |
| **Eliminar** | Borra la aplicación. | — | — | Deja de aceptar datos con su clave; lo ya guardado vence solo. Si la volvés a agregar, tiene **una clave nueva**: hay que actualizar el SDK. |

La **clave pública** (`ly_pub_…`) se genera en Lymen, no se puede cambiar, y **no es un secreto**: va dentro del sitio o la app. Por eso Lymen controla el origen (web) y podés pausar o eliminar la aplicación si hace falta.

## Qué datos recibir

En el detalle de una aplicación, la tabla **Qué datos recibimos** tiene un interruptor **Recibir** por tipo de dato. Lo que está apagado **no sale del navegador ni del celular**.

| Tipo de dato | Qué incluye | Por defecto |
|---|---|---|
| **Visitas a páginas** (en móvil: *Pantallas vistas*) | Cada vez que alguien abre una pantalla. | Encendido |
| **Tiempos de carga** (móvil: *Tiempos de inicio*) | Qué tan rápido abre cada página o la app. | Encendido |
| **Errores de la página** (móvil: *Errores y cierres de la app*) | Cuando algo se rompe. | Encendido |
| **Pedidos al servidor** | Las consultas que hace la página o la app al sistema. Con esto apagado tampoco se agrega la marca de unión con el servidor. | Encendido |
| **Clics y acciones** | Botones tocados (también requiere *Registrar los clics*). | Encendido |
| **Sesiones** | Cuántas personas usan el sitio y por cuánto tiempo. | Encendido |
| **Mensajes de la app (logs)** | Textos que la app escribe para diagnosticar. | **Apagado** |

Apagar un tipo reduce el volumen (costo) y la exposición de datos; encender los mensajes puede traer texto con datos personales, aunque pasen por las reglas de Privacidad. Los eventos de negocio (por ejemplo `turno.reservado`) siempre se mandan.

Estados de una aplicación en la lista: **Recibiendo datos**, **Con errores** y **Sin datos todavía**.

## Privacidad

- Las reglas de Privacidad se aplican **en el dispositivo y otra vez al recibir**.
- Nunca se captura lo que la gente escribe en formularios y no se graban sesiones.
- El identificador de usuario que mandes sale **hasheado** (SHA-256), nunca en claro.
- Si el SDK no logra bajar las reglas, usa reglas de respaldo: DNI, email, tarjetas (solo si el número es válido) y CUIT/CUIL.

Las reglas se editan en **Configuración › Privacidad**.

## Problemas comunes

| Síntoma | Qué hacer |
|---|---|
| Quedó "Esperando el primer dato" | ¿Publicaste o reiniciaste? ¿Abriste el sitio o la app? Revisá que la clave sea la correcta y que la aplicación esté con **Recibir datos** encendido. |
| En web, no llegan datos y en la consola del navegador hay errores de origen | El sitio se abre desde una dirección que no está en la lista. Agregala (con `https://` y sin barra final). |
| No se unen las trazas del navegador con las del servidor | Agregá la dirección de tu API en **Unir con lo que pasa en tu servidor** y permití la marca en el CORS de tu API. |
| Veo menos visitas que en otra herramienta | Revisá el muestreo: 100 % mide todo. |
| Cambié la clave y dejó de andar | Al eliminar y volver a crear la aplicación, la clave cambia. Actualizala en el SDK. |
