WhatsApp Web ya está, por fin, disponible para iOS. Lo hace casi 8 meses después de la llegada del servicio por motivos que, según la compañía, se deben a limitaciones propias del sistema operativo. La explicación real es todo un entramado de ingeniería de software y de políticas internas de la compañía. Así funciona.

El problema

Para entender el problema, que tratamos a fondo en su momento cuando explicamos como funciona (la chapuza) que es WhatsApp Web hay que entender primero cómo funciona en otros sistemas como Android o Windows Phone. En estos casos en los teléfonos se ejecuta una instancia que actúa de servidor y, código QR mediante, ese servidor envía los mensajes al cliente web cuando este lo solicita. Ese es el motivo por el que WhatsApp Web no funciona si el teléfono está sin batería, fuera de cobertura o WiFi o en modo avión, simplemente el servidor no está activo.

Este procedimiento no puede funcionar en iOS (las famosas “limitaciones” a las que se refiere WhatsApp). ¿Por qué? Porque por funcionamiento propio de iOS, el sistema cierra los procesos de las aplicaciones cuando estas dejan de estar activas durante un tiempo. Eso provocaría que, pasado ese tiempo, el servidor del teléfono quede inoperativo y por tanto el cliente web totalmente inservible.

Los UI Background Modes

Ese punto parece contradecir, sin embargo, la multitarea en iOS. Hay aplicaciones como Skype que envían una notificación cuando recibimos una llamada. En realidad no están todo el rato activas, sino que lo hacen una serie de APIs llamadas UI Background Modes. Hay 9 en total.

Advertisement

Ese tipo de procesos no dependen de que la aplicación se esté ejecutando o no” afirma Julio César Fernández en conversación telefónica a Gizmodo en Español, desarrollador de iOS en Gabhel Studios y Apple Developer Evangelist “hay varios: Background Audio (el que usa Skype), Background Location (que usan aplicaciones que usan el GPS como Waze o Citymapper) y el que nos interesa: Background fetch”. Apple describe Background fetch de la siguiente manera

The app regularly downloads and processes small amounts of content from the network.

La aplicación descarga cada cierto tiempo pequeñas cantidades de datos desde la red. Dicho de otro modo: sí es posible enviar información en segundo plano incluso aunque la aplicación de WhatsApp se cierre a los pocos minutos, pero solo si son cantidades de datos muy pequeñas.

El doble servidor

¿Cómo ha solucionado WhatsApp dicho problema teniendo constancia del Background Fetch? Haciendo algo que hasta ahora no había hecho nunca, que sepamos: creando dos sesiones abiertas para un mismo usuario de WhatsApp, pero una de ellas está oculta en un servidor de la compañía.

Advertisement

WhatsApp, al contrario de lo que sucede con otras aplicaciones de mensajería instantánea como Telegram o Facebook Messenger, es notoriamente famosa por permitir una única sesión por cliente. Dicho de otro modo: sólo puedes tener una sesión abierta en un dispositivo. Aquí, y aunque a efectos prácticos el resultado para el usuario final es el mismo, WhatsApp ha hecho algo parecido a una excepción.

Cuando alguien envía un mensaje a un usuario de iOS con WhatsApp Web este llega a esos dos clientes, a esos dos servidores: uno que es el servidor de “espera” tradicional que manda una notificación push al teléfono del usuario y le envía los mensajes una vez se conecta en el iPhone y otro, oculto, que es un servidor al que se conecta el cliente web y que a su vez se sincroniza con los mensajes del teléfonos de dos maneras distintas.

Advertisement

La primera el código QR que actúa como un llave de autenticación en dos pasos (importante como veremos ahora después). La segunda es el famoso Background fetch, este proceso actúa de ping, de ticket, avisando al servidor de cuándo el iPhone está o no disponible. Si deja de estarlo, el servidor cierra sus puertas y con él el cliente web. Este proceso tarda en torno a medio minuto desde que el iPhone se desconecta hasta que el cliente web realmente lo refleja, a veces más. Esto implicaría, en principio, que WhatsApp Web debería seguir funcionando para los usuarios de iPhone incluso aunque el teléfono no esté online. Por algún motivo, no es así.

Las excepciones

La clave es la sincronización. Mediante background fetch el servidor no sólo sabe si el iPhone está activo o no sino además la sincronización entre uno y otro. Hay, con todo, algunas puntualizaciones importantes:

  • ¿Qué ocurre con las notificaciones push?: Cuando se leen los mensajes en WhatsApp Web no se borran, porque van por un proceso completamente distinto y no hay manera de sincronizarlas Así, en el teléfono en la pantalla de bloqueo o en el centro de notificaciones pueden quedarse como aviso mensajes que en realidad ya se han leído.
  • ¿Qué ocurre con las fotos? Esta es la parte más interesante. Lo que hace la primera vez que iPhone y servidor se sincronizan es enviarlas (y no todas, sólo las recientes) a una resolución bajísima, con un degradado, y una flecha para descargarlas sobre ella. De este modo ocupan, evidentemente, mucho menos espacio. Julio César amplía: “Lo más importante es que las fotos nunca llegan a estar en el servidor sino en el teléfono. Por seguridad. Es el origen de todo este lío. Cuando queremos bajarlas desde el cliente web, el servidor a través del Background fetch notifica al iPhone y en ningún momento “despierta” a la app remotamente sino que accede a la zona de disco de la aplicación, que es a la que tiene permisos vía el Background fetch y recupera los datos”. Las lee directamente del almacenamiento del iPhone.

La parte de las fotos es clave porque el motivo por el que WhatsApp ha montado todo este tinglado tan complejo es porque se niega a almacenar los mensajes y archivos de sus usuarios. Sólo hace de mensajero. Aunque el sistema tiene sus errores, y eso es carne de otro post, todo este entramado tan complejo le permite seguir haciendo exactamente eso, limitaciones de iOS mediante. La gran ventaja, eso sí: La versión de iOS respeta muchísimo más la batería del terminal.

Por qué ha tardado tanto tiempo

Hay varios motivos. Por un lado el despliegue de ingeniería que requiere realizar todo esto es más complejo. Y eso lleva más tiempo. Por otro lado, WhatsApp ha negociado probablemente con Apple el uso del Background fetch para este uso concreto (la compañía no ha confirmado esta parte en concreto a Gizmodo en Español). La premisa de Apple es que sí o sí se consuman pocos datos con Background fetch con el objetivo de preservar la batería, y lo consiguen. Este es el motivo por el que la aplicación también avisa de que es mejor utilizarlo vía WiFi, para no incurrir en gastos adicionales.

Advertisement

Y, por último, entre el lanzamiento de WhatsApp Web para Android y el lanzamiento de WhatsApp Web para iOS ha ocurrido algo notablemente importante dentro de Apple: el lanzamiento del Apple Watch. Las aplicaciones del Apple Watch funcionan en esencia de manera muy similar a la de WhatsApp Web para iOS, haciendo de “servidores” para el contenido que se muestra en el reloj. Es muy posible que la implementación de las mismas haya abierto la puerta, por fin, a que WhatsApp esquive las limitaciones técnicas del sistema y pueda ofrecer de manera definitiva el cliente web para todos los usuarios.

Click here to view this kinja-labs.com embed.

***

Psst! también puedes seguirnos en Twitter, Facebook o Google+ :)