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.

Advertisement

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.

Advertisement

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.

Advertisement

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.

Advertisement

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.

***

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