Requisito fundamental
El teléfono que pide ayuda no tiene Internet
Respuesta directa
SÍ para Android→Android y en lo esencial para las demás combinaciones; PARCIALMENTE solo en lo que depende de datos remotos. Ninguna parte del inicio y la coordinación de una ayuda necesita servidor.
Estado del requisito: REQUIERE VALIDACIÓN EN HARDWARE. Está sostenido por documentación oficial, no por una prueba con dos teléfonos.
Flujo offline completo, paso a paso
| Paso | Sin Internet en A | |
|---|---|---|
| A | Abrir Conecta sin Internet | AUTOMÁTICO |
| B | Mostrar la interfaz y las funciones principales sin servidor | AUTOMÁTICO |
| C | Activar el modo Necesito ayuda | AUTOMÁTICO |
| D | Descubrir dispositivos cercanos por radio | AUTOMÁTICO |
| E | Mostrar posibles ayudantes con alias efímero y distancia | AUTOMÁTICO |
| F | Enviar la solicitud directamente entre dispositivos | AUTOMÁTICO |
| G | Recibir la aceptación del teléfono ayudante | AUTOMÁTICO |
| H | Autenticación mutua | AUTOMÁTICO |
| I | Handshake criptográfico X25519 → HKDF → AES-GCM | AUTOMÁTICO |
| J | Negociar tiempo, MB y consentimiento | AUTOMÁTICO |
| K | Intercambiar cifrada la información de conexión | AUTOMÁTICO |
| L | Guiar al ayudante para activar el compartir de su sistema | CONFIRMACIÓN DEL USUARIO |
| M | Permitir que el teléfono A se conecte | CONFIRMACIÓN DEL USUARIO |
| N | Comprobar que A tiene Internet REAL | AUTOMÁTICO |
| O | Mantener la sesión: temporizador, estado, latidos | AUTOMÁTICO |
| P | Finalizar la sesión desde cualquiera de los dos lados | AUTOMÁTICO |
| Q | Registrar localmente el resultado | AUTOMÁTICO |
El paso N ocurre cuando ya existe conexión: es una petición real de verificación, no el simple estado “conectado” del sistema.
Qué funciona sin Internet
- Abrir la app y toda su interfaz, sin cuenta y sin pantalla de acceso bloqueante.
- Descubrir a otros por BLE, Wi-Fi Direct o Wi-Fi Aware en Android; MultipeerConnectivity o CoreBluetooth en iOS.
- Alias efímeros y distancia aproximada estimada por potencia de señal.
- Solicitud, aceptación, autenticación mutua y handshake completo: la criptografía es local y no necesita ninguna autoridad remota.
- Negociación de motivo, MB, minutos y consentimiento.
- Entrega cifrada de la credencial de conexión y unión a la red.
- Temporizador, estado, cancelación, errores y finalización.
- Registro local del evento.
- La caducidad usa el reloj monotónico del dispositivo, no una hora de red.
Qué NO funciona sin Internet
- Verificar reputación o reportes contra el servidor: se usa la copia local guardada y, si no hay, se muestra “reputación no verificada”.
- Cualquier alta de cuenta, y por supuesto la descarga inicial de la app.
- Telemetría y sincronización del historial.
- La comprobación de Internet real, que por definición ocurre ya con conexión.
Consecuencia de diseño incorporada: el primer arranque y el modo solicitante deben ser utilizables sin cuenta y sin red. Nada de perfil obligatorio antes de pedir ayuda.
Arquitectura local primero y cola de eventos
Cada dispositivo guarda en una base de datos local cifrada (en Android con clave en Keystore; en iOS con Data Protection y Keychain) el perfil local, el historial mínimo y una cola de eventos: solicitud, aceptación, inicio, fin, duración, MB estimados y errores.
- Cada evento lleva un identificador único, el identificador de sesión, una marca temporal monotónica y un contador.
- Al recuperar Internet se envían con clave de idempotencia y el servidor deduplica por identificador.
- Si la sesión entera transcurrió sin red, cada teléfono guarda su copia y el primero que recupere conexión sincroniza la suya; las dos versiones se reconcilian por identificador de sesión.
- Los secretos temporales —clave de la red y claves de sesión— se borran al terminar y nunca entran en la cola.
Matriz por combinación
| Combinación | Descubrimiento sin red | Handshake sin red | Unión | Nota |
|---|---|---|---|---|
| Android → Android | Mejor caso; ayudante puede anunciar en segundo plano | |||
| iPhone → iPhone | Segundo plano limitado; hotspot manual | |||
| Android pide → iPhone ayuda | Solo BLE; iPhone casi en primer plano | |||
| iPhone pide → Android ayuda | Ayudante Android anuncia en segundo plano |
Caso extremo: A sin Internet durante todo el proceso
Respuesta: SÍ, con dos confirmaciones del sistema. A abre Conecta, encuentra a B, B acepta, se negocia y cifra todo localmente, B activa el compartir en su teléfono, A confirma la unión, A obtiene Internet real, lo usa, termina la sesión y guarda el resultado. Solo después, ya con conexión, A sincroniza con el servidor. Nada de lo anterior requiere que A haya tenido conexión antes.
NO DEMOSTRADO EN HARDWARERiesgo nuevo detectado
Sin servidor no hay forma de verificar en el momento la identidad ni la reputación del otro. El diseño se apoya en identidades efímeras firmadas y confianza en el primer contacto, y la reputación se marca explícitamente como “no verificada sin conexión”. Queda añadido a la lista de riesgos abiertos.