Me gustaría verificar si tengo una conexión a Internet en iOS usando las bibliotecas Cocoa Touch o en macOS usando las bibliotecas Cocoa .
Se me ocurrió una manera de hacer esto usando un NSURL
. La forma en que lo hice parece un poco poco confiable (porque incluso Google podría algún día estar caído y depender de un tercero parece malo), y si bien podría verificar si hay alguna respuesta de algunos otros sitios web si Google no respondió, parece un desperdicio y una sobrecarga innecesaria en mi aplicación.
- (BOOL) connectedToInternet
{
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]];
return ( URLString != NULL ) ? YES : NO;
}
Es lo que he hecho mal (sin mencionar que stringWithContentsOfURL
está en desuso en iOS 3.0 y macOS 10.4) y, de ser así, ¿cuál es una mejor manera de lograrlo?
ios
macos
cocoa
cocoa-touch
reachability
Brock Woolf
fuente
fuente
return (BOOL)URLString;
, o incluso mejor,return !!URLString
oreturn URLString != nil
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"https://twitter.com/getibox"] encoding:NSUTF8StringEncoding error:nil];
Para deshacerte de la molesta advertencia.Respuestas:
Importante : esta verificación siempre debe realizarse de forma asíncrona. La mayoría de las respuestas a continuación son sincrónicas, así que tenga cuidado, de lo contrario, congelará su aplicación.
Rápido
1) Instalar a través de CocoaPods o Carthage: https://github.com/ashleymills/Reachability.swift
2) Prueba de accesibilidad a través de cierres
C objetivo
1) Agregue
SystemConfiguration
marco al proyecto pero no se preocupe por incluirlo en ningún lado2) Agregue la versión de Tony Million
Reachability.h
yReachability.m
al proyecto (que se encuentra aquí: https://github.com/tonymillion/Reachability )3) Actualiza la sección de interfaz
4) Luego implemente este método en el archivo .m de su controlador de vista al que puede llamar
Nota importante: la
Reachability
clase es una de las clases más utilizadas en los proyectos, por lo que puede tener conflictos de nombres con otros proyectos. Si esto sucede, deberá cambiar el nombre de uno de los pares deReachability.h
yReachability.m
archivos a otra cosa para resolver el problema.Nota: El dominio que usa no importa. Solo está probando una puerta de enlace a cualquier dominio.
fuente
SystemConfiguration.framework
al proyecto (para el método 1).Me gusta mantener las cosas simples. La forma en que hago esto es:
Luego, uso esto cada vez que quiero ver si tengo una conexión:
Este método no espera cambios en los estados de la red para hacer cosas. Simplemente prueba el estado cuando se lo pides.
fuente
Usando el código de accesibilidad de Apple, creé una función que verificará esto correctamente sin que tenga que incluir ninguna clase.
Incluya el SystemConfiguration.framework en su proyecto.
Haz algunas importaciones:
Ahora solo llame a esta función:
Y es iOS 5 probado para ti.
fuente
Esta solía ser la respuesta correcta, pero ahora está desactualizada ya que en su lugar debes suscribirte a las notificaciones de accesibilidad. Este método verifica sincrónicamente:
Puedes usar la clase de accesibilidad de Apple. También le permitirá verificar si el Wi-Fi está habilitado:
La clase de accesibilidad no se incluye con el SDK, sino que forma parte de esta aplicación de muestra de Apple . Simplemente descárguelo y copie Reachability.h / m a su proyecto. Además, debe agregar el marco de SystemConfiguration a su proyecto.
fuente
Aquí hay una respuesta muy simple:
La URL debe apuntar a un sitio web extremadamente pequeño. Uso el sitio web móvil de Google aquí, pero si tuviera un servidor web confiable, subiría un pequeño archivo con solo un carácter. para obtener la máxima velocidad.
Si verifica si el dispositivo es de alguna manera lo que desea hacer conectado a Internet de , definitivamente recomendaría usar esta solución simple. Si necesita saber cómo está conectado el usuario, utilizar la accesibilidad es el camino a seguir.
Cuidado: esto bloqueará brevemente tu hilo mientras carga el sitio web. En mi caso, esto no fue un problema, pero deberías considerarlo (agradece a Brad por señalar esto).
fuente
Así es como lo hago en mis aplicaciones: si bien un código de respuesta de estado 200 no garantiza nada, es lo suficientemente estable para mí. Esto no requiere tanta carga como las respuestas de NSData publicadas aquí, ya que la mía solo verifica la respuesta HEAD.
código SWIFT
Código Objective-C
fuente
Apple proporciona un código de muestra para verificar los diferentes tipos de disponibilidad de red. Alternativamente, hay un ejemplo en el libro de cocina para desarrolladores de iPhone.
Nota: Consulte el comentario de @ KHG sobre esta respuesta con respecto al uso del código de accesibilidad de Apple.
fuente
Podrías usar
Reachability
por ( disponible aquí ).fuente
Apple proporciona una aplicación de muestra que hace exactamente esto:
Alcance
fuente
Solo se ha actualizado la clase de accesibilidad. Ahora puedes usar:
fuente
Una versión de Accesibilidad para iOS 5 es darkseed / Reachability.h . ¡No es mío! =)
fuente
Aquí hay una bonita modernización de accesibilidad mediante ARC y GCD:
Alcance
fuente
Si estas usando
AFNetworking
, puede usar su propia implementación para el estado de accesibilidad a Internet.La mejor manera de usar
AFNetworking
es subclasificar elAFHTTPClient
clase y usar esta clase para hacer sus conexiones de red.Una de las ventajas de usar este enfoque es que puede usar
blocks
para establecer el comportamiento deseado cuando cambia el estado de accesibilidad. Suponiendo que he creado una subclase singleton deAFHTTPClient
(como se dice en las "Notas de subclasificación" en documentos de AFNetworking ) con nombreBKHTTPClient
, haría algo como:También puede verificar las conexiones Wi-Fi o WLAN específicamente usando las enumeraciones
AFNetworkReachabilityStatusReachableViaWWAN
yAFNetworkReachabilityStatusReachableViaWiFi
( más aquí ).fuente
He usado el código en esta discusión , y parece funcionar bien (lea todo hilo!).
No lo he probado exhaustivamente con todos los tipos de conexión imaginables (como Wi-Fi ad hoc).
fuente
Muy simple ... Pruebe estos pasos:
Paso 1: agrega el
SystemConfiguration
marco a tu proyecto.Paso 2: importe el siguiente código en su
header
archivo.Paso 3: usa el siguiente método
Tipo 1:
Tipo 2:
Importar encabezado :
#import "Reachability.h"
Paso 4: Cómo usar:
fuente
fuente
O use la clase de accesibilidad .
Hay dos formas de verificar la disponibilidad de Internet utilizando el SDK de iPhone:
1. Verifique que la página de Google esté abierta o no.
2. Clase de accesibilidad
Para obtener más información, consulte Accesibilidad (Desarrollador de Apple).
fuente
Utilice http://huytd.github.io/datatify/ . Es más fácil que agregar bibliotecas y escribir código usted mismo.
fuente
Primero : Agregar
CFNetwork.framework
en el marcoCódigo :
ViewController.m
fuente
Primero descargue la clase de accesibilidad y coloque el archivo reachability.h y reachabilty.m en su Xcode .
La mejor manera es crear una clase de Funciones común (NSObject) para que pueda usarla en cualquier clase. Estos son dos métodos para verificar la accesibilidad de la conexión de red:
Ahora puede verificar la conexión de red en cualquier clase llamando a este método de clase.
fuente
También hay otro método para verificar la conexión a Internet utilizando el SDK de iPhone.
Intente implementar el siguiente código para la conexión de red.
fuente
Me pareció simple y fácil de usar la biblioteca SimplePingHelper .
Código de muestra: chrishulbert / SimplePingHelper ( GitHub )
fuente
Descargue el archivo de accesibilidad, https://gist.github.com/darkseed/1182373
Y agregue
CFNetwork.framework
y 'SystemConfiguration.framework' en el marcoImporta # "Accesibilidad.h"
Primero : Agregar
CFNetwork.framework
en el marcoCódigo :
ViewController.m
fuente
Swift 3 / Swift 4
Primero debes importar
Puede verificar la conexión a internet con el siguiente método
fuente
La clase de accesibilidad está bien para averiguar si la conexión a Internet está disponible para un dispositivo o no ...
Pero en caso de acceder a un recurso de intranet :
Hacer ping al servidor de intranet con la clase de accesibilidad siempre devuelve verdadero.
Entonces, una solución rápida en este escenario sería crear un método web llamado
pingme
junto con otros métodos web en el servicio. Elpingme
debería devolver algo.Entonces escribí el siguiente método sobre funciones comunes
El método anterior fue muy útil para mí, por lo que cada vez que intento enviar algunos datos al servidor siempre verifico la accesibilidad de mi recurso de intranet utilizando este URLRequest de tiempo de espera bajo.
fuente
Hacer esto usted mismo es extremadamente simple. El siguiente método funcionará. Solo asegúrese de no permitir que un protocolo de nombre de host como HTTP, HTTPS, etc. se pase con el nombre.
Es rápido, simple e indoloro.
fuente
Además de la accesibilidad, también puede usar la biblioteca auxiliar Simple Ping . Funciona muy bien y es fácil de integrar.
fuente
Creo que esta es la mejor respuesta.
"Sí" significa conectado. "No" significa desconectado.
fuente
Importe la
Reachable.h
clase en suViewController
, y use el siguiente código para verificar la conectividad :fuente
Paso 3: crea la siguiente función
Paso 4: llame a la función de la siguiente manera:
fuente