Requisito fundamental

El teléfono que pide ayuda no tiene Internet

Conecta no puede depender de un servidor para iniciar y coordinar una ayuda local. Esto documenta hasta dónde llega el funcionamiento sin red.
PROTOTIPO WEB / ESPECIFICACIÓNNO DEMOSTRADO EN HARDWARE

Respuesta directa

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

PasoSin Internet en A
AAbrir Conecta sin InternetAUTOMÁTICO
BMostrar la interfaz y las funciones principales sin servidorAUTOMÁTICO
CActivar el modo Necesito ayudaAUTOMÁTICO
DDescubrir dispositivos cercanos por radioAUTOMÁTICO
EMostrar posibles ayudantes con alias efímero y distanciaAUTOMÁTICO
FEnviar la solicitud directamente entre dispositivosAUTOMÁTICO
GRecibir la aceptación del teléfono ayudanteAUTOMÁTICO
HAutenticación mutuaAUTOMÁTICO
IHandshake criptográfico X25519 → HKDF → AES-GCMAUTOMÁTICO
JNegociar tiempo, MB y consentimientoAUTOMÁTICO
KIntercambiar cifrada la información de conexiónAUTOMÁTICO
LGuiar al ayudante para activar el compartir de su sistemaCONFIRMACIÓN DEL USUARIO
MPermitir que el teléfono A se conecteCONFIRMACIÓN DEL USUARIO
NComprobar que A tiene Internet REALAUTOMÁTICO
OMantener la sesión: temporizador, estado, latidosAUTOMÁTICO
PFinalizar la sesión desde cualquiera de los dos ladosAUTOMÁTICO
QRegistrar localmente el resultadoAUTOMÁ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ónDescubrimiento sin redHandshake sin redUniónNota
Android → AndroidMejor caso; ayudante puede anunciar en segundo plano
iPhone → iPhoneSegundo plano limitado; hotspot manual
Android pide → iPhone ayudaSolo BLE; iPhone casi en primer plano
iPhone pide → Android ayudaAyudante 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 HARDWARE

Riesgo 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.