Detección de la conectividad de red

Completado

Los dispositivos móviles usan tecnologías de red de telefonía móvil y Wi-Fi para conectarse a Internet. Esta dependencia significa que los usuarios podrían perder la conexión a Internet mientras usan la aplicación. Si no se agrega código para protegerse frente a esta posibilidad, la aplicación podría dejar de responder y proporcionaría a los usuarios una mala experiencia.

En esta unidad, se va a proteger la aplicación al detectar en qué momento pierden los usuarios la conexión a Internet. Esta información es importante cuando se empiezan a consumir servicios web REST.

¿Para qué sirve detectar la conectividad de red en aplicaciones móviles?

Es importante detectar si tiene conexión a Internet en una aplicación móvil, porque los dispositivos móviles pierden la conexión a menudo. Esto puede deberse a una cobertura deficiente por parte de un proveedor de servicios de red o a estar en un entorno que tiene recepción limitada o nula, como un túnel, un valle profundo o una montaña alta. También hay diferentes tipos de conectividad de red. Si se encuentra en un entorno que proporciona conectividad WiFi, normalmente tiene un ancho de banda más alto que si depende del acceso a la red de telefonía móvil. Es posible que aún pueda conectarse a Internet, pero algunas operaciones, como la transmisión de contenido de vídeo, pueden ser más lentas (y costosas) a través de un vínculo de red de telefonía móvil en comparación con una conexión WiFi.

Dado que los dispositivos móviles se enfrentan a estos desafíos, se debe escribir código que los proteja. Si no se hace y la aplicación intenta realizar operaciones que usan Internet, esta podría dejar de responder.

Además, se quiere ofrecer una buena experiencia del usuario cuando la aplicación no se pueda conectar a Internet. Si la aplicación deja de funcionar porque no hay servicio de Internet, los usuarios podrían quedarse desconcertados. Lo mejor que se puede hacer es proporcionar información a los usuarios. Indíqueles que no disponen de una conexión a Internet y que es posible que la aplicación no se pueda ejecutar por completo sin esta. La imagen siguiente muestra un ejemplo:

Screenshot of an app showing a warning about limited network connectivity.

En este ejemplo, el desarrollador de la aplicación informa al usuario de que no tiene conexión a Internet y debe intentar conectarse a una red Wi-Fi.

Detección de la conectividad de red

Para comprobar si hay conectividad de red en una aplicación .NET MAUI, use la clase Connectivity. Esta clase expone una propiedad llamada NetworkAccess y un evento denominado ConnectivityChanged. Puede usar estos miembros para detectar cambios en la red.

Para acceder a la propiedad NetworkAccess, use otra propiedad llamada Current. Este es el mecanismo que usa Connectivity para acceder a la implementación específica de la plataforma.

La propiedad NetworkAccess devuelve un valor de la enumeración NetworkAccess. La enumeración tiene cinco valores: ConstrainedInternet, Internet, Local, None y Unknown. Si la propiedad NetworkAccess devuelve un valor NetworkAccess.None, sabrá que no tiene conexión a Internet y que no debe ejecutar código de red. Este mecanismo es portable a través de plataformas. El código siguiente muestra un ejemplo:

if (Connectivity.Current.NetworkAccess == NetworkAccess.None)
{
    ...
}

El evento ConnectivityChanged también permite determinar si el dispositivo está conectado a Internet. El evento ConnectivityChanged se desencadena de forma automática cuando cambia el estado de la red. Por ejemplo, si empieza con una conexión de red activa, pero al final la pierde, se genera el evento ConnectivityChanged para informarle sobre el cambio. Uno de los parámetros pasados al controlador de eventos ConnectivityChanged es un objeto ConnectivityChangedEventArgs. Este objeto contiene una propiedad denominada IsConnected. Puede usar la propiedad IsConnected para determinar si está conectado a Internet. Este es un ejemplo:

Connectivity.Current.ConnectivityChanged += Connectivity_ConnectivityChanged;
...
void Connectivity_ConnectivityChanged(object sender, ConnectivityChangedEventArgs  e)
{
    bool stillConnected = e.IsConnected;
}

El evento ConnectivityChanged permite escribir aplicaciones que pueden detectar un cambio en el estado de la red y ajustar sin problemas la funcionalidad disponible según los diferentes entornos.

Comprobación de conocimiento

1.

¿Cuál de los siguientes motivos es el mejor para comprobar si está conectado a Internet antes de ejecutar código de red?

2.

Supongamos que está escribiendo una aplicación que un usuario puede ejecutar mientras viaja en un vehículo. Si el vehículo entra en un túnel, el dispositivo podría perder la conectividad a Internet. ¿Qué miembro de la clase Connectivity debe usar para detectar el cambio en la conectividad de red?