Compruebe la conexión a Internet desde Unity

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

  1. Ping algo (por ejemplo Google) – No me gusta esta 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 conectarse a Internet (no garantiza una conexión real).

  3. Network.TestConnection() – Si no tengo conexión a Internet, mi aplicación falla. Así que esto tampoco es correcto.

¿Cómo puedo determinar si tengo conexión a Internet dentro de Unity?

Realmente no creo que Network.TestConnection() es la herramienta adecuada para este trabajo. Según la documentación , me parece que está destinado a probar si NAT está funcionando y su cliente es públicamente accesible por IP, pero lo que usted quiere comprobar es si usted tiene conexión a Internet general.

Aquí está 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 utiliza IEnumerator para la operación asíncrona, por lo que la prueba de conectividad no aguanta 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 })); } 

Usted puede cambiar el sitio web a lo que quiera, o incluso modificar el código para devolver el éxito si cualquiera de una serie de sitios son accesibles. AFAIK no hay manera de comprobar la verdadera conectividad a Internet sin intentar conectarse a un sitio específico en Internet, por lo que "hacer ping" uno o más sitios web como este es probable que sea su mejor opción para determinar la conectividad.

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

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

Además, por ejemplo, en iOS hay nuevas limitaciones adicionales (seguridad de transporte de aplicaciones que permite http sólo cuando está explícitamente incluida en la lista blanca).

Mi activo es una solución fácil, aunque no gratuita: Internet Reachability Verifier en el almacén de activos.

Usted puede intentar 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} 

Hacer Network.TestConnection () en un try catch

 using System.Collections; using UnityEngine; public class Class1 { public Class1() { try { Network.TestConnection(); } catch (System.Exception) { //do something if code does not work } } } 

Creo que este código debería funcionar.

  • Google Play Services no muestra la tabla de clasificación después de Auth
  • ¿Cómo mostrar la misma parte del juego en cada relación de aspecto en dispositivos Android con Unity?
  • Unity 2D: ¿Cómo soportar plataformas múltiples y diferentes dispositivos de relación de aspecto en Unity 2D?
  • Unity Android en el fondo
  • Cómo pasar el parámetro al método java desde c # en JNI
  • Error de segmentación OSX 11 - Android
  • Prácticas recomendadas para guardar el juego cuando el usuario ha salido de Google Play Services?
  • No se puede iniciar la actividad en Android a través de Unity
  • Juego para móviles con Unity - Plugin para compra en la aplicación
  • Unity3D y Android Studio Integration
  • Integración de Unity y Eclipse
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.