• slidebg1

iOS y la gestión de Red


La gestión inteligente de los accesos a la red permite que una aplicación pueda ayudar a la conservación de la batería. Si no hay conexión de red disponible, se deberían impedir los accesos a la red hasta que la conexión sea restablecida.

El principal problema ajeno al programador es la calidad de la señal que se recibe. Esto es debido a que con poca señal la transmisión es más lenta y amplía el tiempo de uso. También es conveniente evitar operaciones pesadas como streaming de vídeo. A no ser que se esté utilizando una conexión WiFi ya que este tipo de red consume mucha menos energía que las tecnologías 4G LTE, 3G… Esto es debido a que los dispositivos LTE utilizan servicios Multi-Entrada y Multi-Salida (MIMO del inglés Multiple-Input and Multiple-Output) la cual permite el uso concurrente de señales y permite mantener dos canales de conexión LTE simultáneamente. De manera similar, todas las antenas de red necesitan escanear en busca de señales de torres de repetición a las que poder conectarse. Otro factor de este tipo que hace un uso intenso de estas tecnologías en concreto de WiFi, ocurre cuando esta se encuentra activada pero no está enlazada a ningún punto compatible, ya que realiza de manera continuada búsquedas de nodos WiFi a los que poder conectarse. 

El uso de almacenamiento en memoria caché* evitará la descarga de componentes que se van a utilizar de manera continuada y no van a actualizarse necesariamente a corto plazo.

 

Para terminar de conocer esta tecnología, se debería de tener en cuenta lo siguiente:

1. Comprobar si hay una conexión de red apropiada antes de realizar cualquier operación de red.

2. Monitorizar de manera continuada la disponibilidad de la red y actuar apropiadamente según su estado.

 

A continuación tenemos un ejemplo de código de cómo se podría comprobar de manera eficiente el estado de la red. Este ejemplo utiliza la librería Reachability.swift[6].

 

Figura 1: Ejemplo de accesibilidad de la red con Reachability.swift

 

1. Se realiza una llamada al método encargado de realizar la operación de red, esta recibe como parámetro un diccionario con el contenido que se quiere enviar en la operación.

2. Para conocer el estado de la conexión de red se realiza una llamada al método isReachable(), este devolverá si es accesible o no.

3. Es creado un nuevo objeto del tipo Reachability.

4. Mediante el objeto que se ha creado en el paso 3, se accede a su propiedad isReachable que nos ofrecerá la información necesaria para saber si la red está accesible o no. Si es accesible el método devolverá un resultado true, en caso contrario el resultado será false.

5. Con el resultado de isReachable se enviará la operación o no. En ambos casos se devolverá un resultado a la llamada realizada en el paso 1.

6. El resultado recibido será la confirmación de que todo ha ido bien o hubo algún tipo de error, en caso de error se recibirá además un mensaje de error que se puede mostrar al usuario.

 

Para monitorizar la red y la ejecución de una cola de operaciones cuando la red esté disponible. Se ha utilizado las librerías Reachability.swift y Alamofire[7] (Figura 2) 

1. La clase NetworkOperation tiene una propiedad llamada isAPIReachable la cual es usada para comprobar si la red está accesible o no.

2. Las propiedades reachability y networkOperationQueue son privadas, ya que no se quiere que estas puedan ser accesibles desde fuera

2. 1. reachability. Nos ofrece información sobre la accesibilidad de la red.

2. 2. networkOperationQueue. Es una cola de operaciones. Esta cola solo permitirá la ejecución de una operación al mismo tiempo.

3. Del NotificationCenter obtenemos cuándo el estado de accesibilidad cambia y habilita o deshabilita la cola de operaciones.

4. El método performNetworkOperation genera y actualiza la lista de operaciones.

5. Para crear y encolar las operaciones se utiliza el método enqueueRequest.

 

Figura 2: Ejemplo monitorización de red y la ejecución de una cola de operaciones en red

 

Las OperationQueue no paran o suspenden la ejecución de ninguna operación. Una cola suspendida simplemente significa que la operación anterior no se ejecutará hasta que la actual termine su ejecución.

Usar peticiones de red basadas en colas es la mejor manera de no bombardear al servidor con múltiples y simultáneas peticiones. Una solución plausible es utilizar dos colas distintas, una para la obtención de imágenes pesadas (datos no críticos para la aplicación) y otra con la que se obtendrá la información más necesaria.

También es una buena práctica encender o apagar esta cola de operación en función de la necesidad de la aplicación. Una cola con tareas que ya no se necesitan deberá ser cancelarlas, para evitar su futura ejecución.

 

 

Públicado el 31/01/2018

Comparte este post: