Rilevare la connettività di rete

Completato

I dispositivi mobili usano le tecnologie Wi-Fi e cellulare per la connessione a Internet. Questa dipendenza implica che gli utenti potrebbero perdere la connessione Internet mentre usano l'applicazione. Se non si aggiunge il codice per evitare questa eventualità, l'app potrebbe smettere di rispondere e offrire agli utenti un'esperienza negativa.

In questa unità, si protegge l'applicazione rilevando quando gli utenti perdono la connessione Internet. Queste informazioni diventano importanti quando si iniziano a utilizzare i servizi Web REST.

Perché rilevare la connettività di rete nelle applicazioni per dispositivi mobili?

Rilevare se è disponibile una connessione Internet in un'applicazione per dispositivi mobili è importante perché i dispositivi mobili spesso possono perdere la connessione. Ciò può essere dovuto a una scarsa copertura da parte di un provider di servizi di rete o a un ambiente con ricezione limitata o assente, ad esempio se ci si trova in un tunnel, in una valle profonda o in alta montagna. Ci sono inoltre tipi diversi di connettività di rete. Se ci si trova in un ambiente che fornisce connettività Wi-Fi, in genere è disponibile una larghezza di banda maggiore rispetto a quando si dipende dall'accesso alla rete cellulare. Potresti comunque essere in grado di connetterti a Internet, ma alcune operazioni, ad esempio lo streaming di contenuti video, potrebbero essere più lente (e costose) su un collegamento cellulare rispetto a una connessione Wi-Fi.

Poiché i dispositivi mobili presentano queste problematiche, è necessario scrivere il codice per evitarle. Se non lo si scrive e l'applicazione tenta di eseguire operazioni che usano Internet, l'applicazione potrebbe smettere di rispondere.

Si vuole anche offrire una buona esperienza utente quando l'applicazione non riesce a connettersi a Internet. Se l'applicazione smette di funzionare perché non è disponibile un servizio Internet, gli utenti possono restare confusi. La cosa migliore da fare è fornire informazioni agli utenti. Comunicare che non è disponibile una connessione Internet e che l'applicazione potrebbe non funzionare in modo completo. La figura seguente mostra un esempio:

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

In questo esempio lo sviluppatore dell'applicazione informa l'utente che non è disponibile una connessione Internet ed è necessario connettersi alla rete Wi-Fi.

Rilevare la connettività di rete

Per controllare la connettività di rete in un'app .NET MAUI, usare la classe Connectivity. Questa classe espone una proprietà denominata NetworkAccess e un evento denominato ConnectivityChanged. È possibile usare questi membri per rilevare i cambiamenti nella rete.

È possibile accedere alla proprietà NetworkAccess tramite un'altra proprietà denominata Current. Questo è il meccanismo che Connectivity accetta per accedere all'implementazione specifica della piattaforma.

La proprietà NetworkAccess restituisce un valore dall'enumerazione NetworkAccess. L'enumerazione ha cinque valori: ConstrainedInternet, Internet, Local, None e Unknown. Se la proprietà NetworkAccess restituisce un valore NetworkAccess.None, significa che non è disponibile una connessione Internet e non è consigliabile eseguire il codice di rete. Questo meccanismo è portabile in più piattaforme. Il codice seguente visualizza un esempio:

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

L'evento ConnectivityChanged consente anche di determinare se il dispositivo è connesso a Internet. L'evento ConnectivityChanged viene attivato automaticamente quando lo stato della rete cambia. Se, ad esempio, si inizia con una connessione di rete attiva che viene poi persa, viene generato l'evento ConnectivityChanged per informare del cambiamento. Uno dei parametri passati al gestore dell'evento ConnectivityChanged è un oggetto ConnectivityChangedEventArgs. Questo oggetto contiene una proprietà denominata IsConnected. È possibile usare la proprietà IsConnected per determinare se si è connessi a Internet. Ecco un esempio:

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

L'evento ConnectivityChanged consente di scrivere app in grado di rilevare una modifica dello stato della rete e regolare facilmente le funzionalità disponibili in base ai diversi ambienti.

Verifica delle conoscenze

1.

Quale dei seguenti è il motivo migliore per controllare se si è connessi a Internet prima di eseguire il codice di rete?

2.

Si supponga di scrivere un'applicazione che un utente può eseguire mentre viaggia in un veicolo. Se il veicolo entra in un tunnel, il dispositivo può perdere la connettività Internet. Quale membro della classe Connectivity si deve usare per rilevare un cambiamento nella connettività di rete?