Reinicie la aplicación, pregunte al gestor por el estado de la conexión y le responderá que está desconectada mientras el menú del sistema muestra claramente un túnel activo. O bien una llamada de guardado devuelve un error que no explica nada, o bien un secreto compartido se declara ausente segundos después de haberse asignado. Tres síntomas, un solo mecanismo: el gestor es una vista sobre un almacén del sistema, y una vista se lee vacía hasta que alguien la carga.

Antes de depurar cualquiera de esas cosas, decida qué API debe usar. Un túnel IPsec o IKEv2 del sistema encaja con el gestor integrado; un protocolo que el sistema no implementa necesita un proveedor de túnel con su propio manejo de paquetes, y ninguna combinación de campos cambia eso.

El gestor es una vista sobre un almacén

Cree u obtenga el gestor, pídale que cargue sus preferencias y deje que el controlador de finalización termine antes de leer el estado o cambiar los ajustes del protocolo. Cuando la tarea sea enumerar configuraciones guardadas, use la llamada de todas las variantes en lugar de reutilizar una sola instancia para dos propósitos. Antes de que llegue la carga, el estado suele ser inválido, y convertir inválido en apagado es justo el error que hace que una aplicación parezca incorrecta solo tras reiniciar.

La escritura sigue el mismo orden. Un guardado intentado en un gestor que nunca cargó nada puede fallar sin un mensaje útil, porque no hay ninguna identidad guardada a la que aplicar el cambio. Cargue, modifique, guarde y luego vuelva a leer el estado. El objeto al que se conecta el sistema es el perfil guardado, no el que estaba editando en memoria.

Los cambios de estado llegan solo mientras mira

Una vez cargadas las preferencias, el estado pasa por desconectado, conectando, conectado, reafirmando y desconectando. Inicialice la interfaz con una sola lectura y después escuche la notificación de cambio en lugar de sondear con un temporizador. El sondeo funciona en primer plano y miente en segundo plano, y así es como las aplicaciones acaban con un indicador que nunca se resuelve.

Las notificaciones solo llegan mientras la aplicación está en primer plano. Cualquier cosa que mantenga estado en segundo plano parecerá obsoleta tras un reinicio, así que refresque al arrancar y de nuevo cuando la aplicación vuelva al primer plano. Si un proveedor es dueño del túnel, condúzcalo mediante el objeto de sesión correspondiente; la propiedad de conexión simple no modela el ciclo de vida de un proveedor.

Los secretos son referencias, no cadenas

Que se informe de un secreto compartido ausente rara vez significa que nadie haya asignado uno. El objeto de protocolo quiere una referencia: una para la contraseña del usuario y otra para la clave precompartida de IPsec. Pasar nil, o una referencia derivada de la entrada equivocada del llavero, produce la misma queja que un hueco vacío. El error nombra el síntoma y esconde la causa, y por eso la gente vuelve a introducir el mismo secreto varias veces.

Escriba primero el secreto como elemento de contraseña genérica y luego lea una referencia persistente a él. Una referencia persistente sobrevive a un reinicio, a diferencia de un puntero en memoria, y es la representación que serializa el perfil. Elija una clase de accesibilidad que siga permitiendo el acceso una vez desbloqueado el dispositivo, o un túnel que debe reconectarse con la pantalla bloqueada fallará la autenticación con un secreto perfectamente válido.

La extensión tiene su propia vista del llavero

Una extensión de red es un proceso aparte, así que el acceso predeterminado de la aplicación al llavero no llega hasta ella. Dé a ambos objetivos el mismo grupo de acceso al llavero en sus derechos, guarde el elemento una vez dentro de ese grupo y deje que cada proceso lo lea. Sin el grupo, la extensión no encuentra nada e informa de un fallo de credenciales que la aplicación no puede reproducir.

Si el proveedor se configura mediante su objeto de configuración de proveedor, no incruste también el secreto dentro de la aplicación. Dos copias divergen, y la divergencia se presenta como credenciales incorrectas en lugar de como duplicación. Un widget o un segundo proceso que informe de otro estado tiene la misma explicación: cada uno necesita el grupo y cada uno debe cargar las preferencias antes de leer.

Ajuste la API al protocolo

El gestor integrado lleva objetos de protocolo IPsec e IKEv2. No se convierte en un cliente SSL VPN genérico mediante campos adicionales, y un perfil desajustado puede guardarse limpiamente y aun así no conectarse nunca. Decida a qué categoría pertenece antes de investigar el estado, porque un fallo de estado y un protocolo no admitido se ven idénticos desde fuera.

Para el próximo reinicio, la lista de comprobación es corta: cargue las preferencias, lea el estado, mantenga las suscripciones de cambios en primer plano, reconstruya las referencias desde el grupo compartido y confirme que el objeto de protocolo coincide con la API que implementó. Recorrer esa lista lleva un minuto; adivinarla lleva una tarde.

Artículos relacionados