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:
-
Ping algo (por ejemplo Google) – No me gusta esta decisión, y he leído sobre los errores en Android.
-
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). -
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?
- La rotación de webcamTexture difiere en unit3d bajo Android
- Cómo encontrar el origen de un permiso en Unity Android
- Arrastre con velocidad en el juego Unity no igual dependiendo de la resolución
- ¿Cómo subir un juego de unidad que es más de 50 mb a google playstore?
- AndroidJNIClass no puede excute mi función no estática
- UnityPlayerActivity no recibe registro onCreate ()
- Multi-plataforma 3d-Engine para incrustar en iOS / Android-View?
- ¿Por qué mis Botones de Unidad necesitan varios grifos para funcionar finalmente?
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.