top of page

Saber si el dispositivo dispone de Wifi o Datos en Unity

  • caldofran
  • May 9, 2017
  • 2 min read

Quizás no suela ser habitual, y la mayoría de las veces no necesitemos saberlo, pero puede ser interesante en ciertas ocasiones, recabar cierta información sobre el dispositivo en el que nos encontramos, en concreto aquí me refiero al tipo de conexión de datos que tiene el dispositivo.

Dependiendo del uso de datos que necesitemos en nuestro juego puede que queramos limitar ciertas funcionalidades si el usuario no tiene el wifi activado, o simplemente advertirle de que si está conectado a través de su proveedor de telefonía móvil puede que su uso de datos aumente como consecuencia del uso de nuestro juego. Comprobar esto en Unity es bastante sencillo mediante el método NetworkInfo.GetReachability().

GetReachability

  • ReachableViaLocalAreaNetwork: Tenemos activado el wifi o la red local

  • ReachableViaCarrierDataNetwork: Accedemos a internet a través de nuestro ISP

  • NotReachable: No tenemos conexión a internet disponible

A pesar de que parece bastante sencillo de utilizar, te puedes encontrar la sorpresa de que en ciertos dispositivos no funcione, como por ejemplo, si exportamos nuestro juego a una aplicación Universal de Windows, esto es debido a que el entorno de ejecución de ciertos "ports" de Unity son más restrictivos que otros.

Para conseguir que esto funcione bajo una aplicación de la tienda de Windows, deberemos realizarlo de otra manera un poco diferente, y necesitaremos, como en la mayoría de singularidades de Windows Store, realizarlo en la solución que se obtiene a través de la publicación desde el menu Build de Unity. Podéis ver este post en el que hago cosas parecidas:

Estos son los pasos a dar:

  • Definir un EventHandler estático y su delegado en cualquier clase dentro de la solución de Unity:

  • Deberemos en nuestro fichero MainPage.xaml.cs subscribirnos a nuestro evento, para lo cual añadimos esta linea dentro del constructor MainPage() generado automaticamente:

  • Añadimos la función que recogera el evento y contendrá la funcionalidad propia del entrono de Windows Store.

Esto conseguirá que cuando llamemos al método IsWifiOrLanEnabled de la clase Foo, el entorno de ejecución de Windows Store nos devuelva la información que expone la API nativa de Windows. El método NetworkInformation.GetInternetConnectionProfile() nos devuelve un profile que expone dos interesantes funcionalidades:

  • IsWlanConnectionProfile: indica si estamos usando Wifi

  • IsWwanConnectionProfile: indica si estamos usando los datos móviles

NOTA: Que ambos valores sean falsos no implica que no estemos conectados a Internet, ya que podríamos estar conectados igualmente a una red local con cable. Para concluir, podemos retocar el primer método IsWifiOrLanEnabled para que sea capaz de diferenciar si estamos ejecutando Unity dentro de una app Universal de Windows o no:

NOTA para iOS: No tengo un iPhone así que desconozco si NetworkInfo.GetReachability() funciona igual que en Android.

 
 
 

Comments


bottom of page