Archivio ScriptsImparare UnityTips

Rilevare connessione ad Internet

Potrebbe capitare (e capita spesso) di dover fare un controllo sulla connessione dell’utente/giocatore, sopratutto se si sta siluppando un gioco/app per dispositivi mobili.

Quando il gioco fa uso di qualche risorsa on-line, come per esempio i servizi Google/Apple (leaderboad, cloud save ecc…) o in moltissimi altri casi, dovremmo fare un check della linea Internet prima di alcune operazioni.

Nel caso in cui l’utente non sia connesso ad Internet potremmo per esempio far apparire un messaggio tipo “Please check Internet connection” o altro e bloccare alcune funzioni che necessitano una connessione attiva.

Se cercate una risposta in giro per i forum, la soluzione più diffusa è questa:

if(Application.internetReachability == NetworkReachability.NotReachable)
        {
            Debug.Log("Error. Check internet connection!");
        }

Un semplice controllo. Ma sbagliato.
Questo controllo cerca di distinguere la rete su cui è connesso l’utente. Fa un check della rete WiFi e il Carrier, che potrebbero essere accessibili, ma comunque non in grado di raggiungere Internet per uno svariato numero di motivi. Potrebbe essere possibile connettersi all’hot spot ma l’hotspot stesso non avere accesso a Internet.
Basterebbe leggere la guida ufficiale di Unity per essere consapevoli che questo non è il metodo migliore.

 

L’unico modo per fare un check della connettività che sia sicuro al 100% è quello di inviare una richiesta ad un servizio, possibilmente molto leggero ed aspettare un’eventuale risposta.

Il metodo che vi consiglio di usare è questo:

    public System.Collections.IEnumerator CheckInternetConnection(Action<bool> action)
    {

        UnityWebRequest www = UnityWebRequest.Get("http://google.com");
        yield return www.SendWebRequest();

        if (www.error != null)
        {
            action(false);
        }
        else
        {
            action(true);
        }

    }

Come è intuibile, si farà una chiamata al sito google.com, notoriamente veloce e sempre on-line.

Per fare il controllo, basterà richiamare la Coroutine con questo codice:

       StartCoroutine(GooglePlayConnection.instance.CheckInternetConnection((isConnected) =>
        {
            if (!isConnected)
            {

                //Ops... non sei connesso ad internet
            }
            else
            {
                //Connessione attiva e funzionante!
            }

        }));

Per esempio nel metodo Start(), possiamo far apparire un messaggio oppure no.

  public GameObject noInternetMessage; //Il gameObject che contiene il messaggio 
   
   void Start()
    {


        StartCoroutine(GooglePlayConnection.instance.CheckInternetConnection((isConnected) =>
        {
            if (!isConnected)
            {
                noInternetMessage.SetActive(true);
            }
            else
            {
               noInternetMessage.SetActive(false);
            }

        }));
        
        
    }

4 pensieri su “Rilevare connessione ad Internet

  1. Buona sera mi scusi il disturbo. Sto seguendo questa guida però quando vado a scrivere GooglePlayConnection.instance.CheckInternetConnection, visual studio non mi riconosce GooglePlayConnection. Tale errore è dovuto dal fatto che devo usare una libreria specifica o perchè nel mio progetto devo importare google play services?

    1. Ciao Daniele, scusa per la risposta tardiva, immagino tu abbia già risolto da tempo.
      Comunque si, è necessario installare il pacchetto dei servizi Google per poterli usare.
      Tramite questo pacchetto (Google Play e Google Games) potrai accedere a tutti i servizi messi a disposizione da Google, oltre che ad abilitare l’accesso come utente, potrai utilizzare il salvataggio su Cloud, l’inserimento di obbiettivi da sbloccare, la gestione degli ADS, classifiche punteggi e molto altro.

  2. sale, sto pensando di programmare in c# da c++ ma non ho conoscenze sullo sviluppo di una piattaforma per telefoni cellulari per un app di gioco mi interesserebbe la risposta al commento precedente se necessita di una libreria e poi avrei una domanda. potete fare un tutorial per spiegare come deve esser configurato un server di gioco per un app di gioco ad esempio classifica generle, lista degli utenti iscritti per creare mach di gioco fra i giocatori, e acquisti in app. grazie

    1. Ciao Silvio, la tua domanda ha diverse risposte. Il metodo migliore per avere delle classifiche on-line, rewards, obbiettivi da sbloccare ecc… su giochi per cellulari è quello di affidarsi ai servizi Google Games per Android o Apple per IOS. Questi servizi permettono di fare molteplici cose senza dover possedere un server proprio dove salvare i dati. Per esempio si può salvare lo stato di un gioco su Cloud così da poterlo riprende anche su un dispositivo diverso. Utilizzare tali servizi è relativamente semplice ma necessita di una certa dimestichezza con la Console Developers dei servizi.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.