unity test notreachable networkreachability network internetreachability application c# android ios unity3d internet-connection

c# - test - Compruebe la conectividad a internet de Unity



internetreachability (3)

En realidad, no creo que Network.TestConnection() sea ​​la herramienta adecuada para este trabajo. De acuerdo con la documentación , me parece que está destinado a pruebas si NAT funciona y su cliente es accesible públicamente por IP, pero lo que desea verificar es si tiene conectividad general a Internet.

Aquí hay una solución que encontré en Unity Answers por el usuario pixel_fiend , que simplemente prueba un sitio web para ver si el usuario tiene conectividad. Un beneficio de este código es que usa IEnumerator para la operación asincrónica, por lo que la prueba de conectividad no retendrá el resto de su aplicación:

IEnumerator checkInternetConnection(Action<bool> action){ WWW www = new WWW("http://google.com"); yield return www; if (www.error != null) { action (false); } else { action (true); } } void Start(){ StartCoroutine(checkInternetConnection((isConnected)=>{ // handle connection status here })); }

Puede cambiar el sitio web a lo que desee, o incluso modificar el código para devolver el éxito si se puede acceder a cualquiera de una serie de sitios. AFAIK no hay forma de verificar la verdadera conectividad a Internet sin intentar conectarse a un sitio específico en Internet, por lo que "hacer ping" a uno o más sitios web como este es probablemente la mejor opción para determinar la conectividad.

Tengo un proyecto de Unity que creo para plataformas Android e iOS. Quiero verificar la conectividad a Internet en los dispositivos de escritorio, Android y iOS. He leído acerca de tres soluciones diferentes:

  1. Hacer ping a algo (por ejemplo, Google) - No me gusta mucho esa decisión, y he leído sobre los errores en Android.

  2. Application.internetReachability : según la documentación de Unity, esta función solo determinará que tengo la POSIBILIDAD de conectarme a Internet (no garantiza una conexión real).

  3. Network.TestConnection() - Si no tengo conexión a Internet, mi aplicación falla. Entonces esto tampoco es correcto.

¿Cómo puedo determinar si tengo conectividad a Internet desde Unity?


La forma correcta de probar la conectividad a Internet "garantizada" es hacer la detección de portal cautivo mediante una solicitud http (s) a un lugar con contenido conocido. Así es como los propios sistemas operativos prueban si deben presentar una pantalla de conexión wifi al usuario.

El ping simple o la comprobación del estado de error / éxito de la solicitud de www no es suficiente, ya que, por ejemplo, la página de inicio de sesión de wifi del hotel / aeropuerto puede devolverse sin código de error (en lugar de la página que deseaba).

Además, por ejemplo, en iOS existen nuevas limitaciones adicionales (seguridad de transporte de la aplicación que permite http solo cuando se incluye explícitamente en la lista blanca).

Mi activo es una solución fácil, aunque no gratuita: verificador de disponibilidad de Internet en la tienda de activos.


Puedes probar esto:

if(Application.internetReachability == NetworkReachability.NotReachable) { // There is no internet connection Debug.Log("Error. Check internet connection!"); } else {// there is internet connection , do stuff here}