home - voice over iphone
Cómo usar iOS Accesibilidad (3)
Accesibilidad hace una mejor conjetura si internet es alcanzable o no. Le dice si tiene acceso a través de WiFi o si solo tiene acceso a través de Mobile Data. No hay garantía de que sea correcto. Si dice que tienes una conexión WiFi, esa conexión se puede perder un segundo después. La única forma de saber si el acceso a una URL funcionará o no es hacer ese acceso y ver qué pasa. Hay situaciones en las que el acceso funcionará cuando Reachability indique que no y viceversa.
Esto es lo que utilizo Reachibility for: Después de que las descargas fallaran porque no había conexión a Internet, comenzaré a reintentar cuando Alcance detecta un cambio (en realidad unos segundos más tarde; el acceso URL a menudo falla inmediatamente después de que Reachability indique que WiFi vuelve). Después de que las descargas fallaran cuando no se permitieron los datos móviles, verifique si los datos móviles están disponibles y solicite al usuario que permita el uso de datos móviles.
Estoy desarrollando una aplicación para iPhone que usa la red. El iPhone se comunica con mi servidor a través de una solicitud HTTP y debe funcionar con WiFi y 3G.
Actualmente uso NSURLConnection initWithRequest
para enviar solicitudes asíncronas a mi servidor y obtener respuestas (pero pronto me moveré a trabajar con la biblioteca ASIHTTPRequest
)
Entendí que con este tipo de aplicaciones (aplicaciones que requieren conexión a Internet) debería (¿debo?) Utilizar Reachability.
Después de buscar en la web y mirar el código de ejemplo de Reachability de Apple, todavía no entiendo algunas cosas básicas:
¿Cuál es el objetivo principal de Accesibilidad?
En el ejemplo de Apple, detectan problemas de red con el host, WiFi y 3G y le presentan al usuario un mensaje apropiado.
¿Es este el objetivo principal de Accesibilidad, mostrarle al usuario un mensaje? ¿O necesito usarlo para otros escenarios más prácticos? Por ejemplo, si la solicitud NSURLConnaction
ha fallado, ¿necesito usar Reachability de alguna manera para volver a enviar la solicitud?
¿Cuál es el uso correcto de Accesibilidad?
¿Es común usar solo una instancia cuando se inicia la aplicación, y luego escuchar los cambios en la red? ¿O debería verificar el estado de accesibilidad antes de cada solicitud de red?
¿Es suficiente usar reachabilityWithHostName
o también necesito reachabilityForLocalWiFi
y reachabilityForInternetConnection
?
Una cosa más , entendí que Apple puede rechazar aplicaciones que usan la red y no usan Accesibilidad.
¿Cuáles son los métodos " obligatorios " que debo implementar?
¿Será suficiente notificar al usuario que actualmente no hay internet?
Reachability es un proyecto de ejemplo que Apple ha hecho. La gente usa esto como una API en el marco de SystemConfiguration. Como ya has visto, existen métodos para verificar si un host es accesible, y así sucesivamente.
La forma en que uso el proyecto Reachabilty es que hice una clase con un método de clase que devuelve un booleano si el host del que estoy solicitando datos está disponible. Si es así, el método devuelve YES
y si no lo es, devuelve NO
(obviamente).
Ahora, en la aplicación en la que estoy haciendo uso de las conexiones, necesita / debería verificar si es posible iniciar una conexión como lo indica la documentación de Apple. Tengo un simple y luego mostrar un mensaje de alerta apropiado que la solicitud no pudo completarse en este momento.
No hay requisitos que deba volver a intentar automáticamente si la solicitud no pudo llevarse a cabo la primera vez. El objetivo principal de esto es evitar que su aplicación se bloquee y, al mismo tiempo, comunicarle al usuario que no se pudo realizar.
No utilizo las notificaciones yo mismo, pero eso es porque no estoy interesado en monitorear si la conexión se puede llevar a cabo o no. Esto es algo que tendrá que decidir según las demandas de su aplicación.
No estás obligado a usar todos los métodos en la clase Reachablitiy, es suficiente usar uno de ellos. Está documentado lo que ofrecen los diferentes métodos y cuándo deben usarse en el archivo de encabezado.
Recuerde incluir el marco de trabajo SystemConfiguration
.
Reachability
es una clase de utilidad de red de ayuda, se utiliza para obtener diversas informaciones sobre el estado de la conexión
¿Cuál es el objetivo principal de Accesibilidad?
- La accesibilidad se usa para consultar el estado de la red
- y registrar a sus oyentes para informarse cuando la conectividad cambie
¿Es este el objetivo principal de Accesibilidad, mostrarle al usuario un mensaje?
No, por supuesto, su uso principal es probar si hay conectividad a Internet o recibir una notificación si la conectividad cambia
Por ejemplo, si la solicitud NSURLConnaction ha fallado, ¿necesito usar Reachability de alguna manera para volver a enviar la solicitud?
Sí, podría usarlo, por ejemplo, lo que normalmente hago en mi proyecto es guardar todas las solicitudes que se han hecho a un servidor remoto, digamos que quiero descargar 10 archivos,
Cuando cualquier archivo falla el proceso de descarga debido a que no hay conexión a Internet, los guardo en una serie de descargas fallidas,
Cuando la accesibilidad me informa que la conexión a Internet se ha restaurado, repito este conjunto y comienzo nuevamente el proceso de descarga.
¿Cuál es el uso correcto de Accesibilidad?
Depende de tus patrones y necesidades.
¿Es común usar solo una instancia cuando se inicia la aplicación, y luego escuchar los cambios en la red?
Sí, eso es lo que hago, en mis proyectos solo tengo 1 instancia de una clase de administrador de descargas, y esta clase tiene la única instancia activa de Accesibilidad
¿O debería verificar el estado de accesibilidad antes de cada solicitud de red?
Puedes hacer eso sin tener múltiples instancias de clases de Accesibilidad, lo que normalmente hago es tener un método dentro de mi administrador de descargas que me diga usando Reachability si hay conexión o no.
¿Es suficiente usar reachabilityWithHostName o también necesito reachabilityForLocalWiFi y reachabilityForInternetConnection?
No estoy seguro de esto, pero lo que normalmente hago es probar la conectividad en todos los medios, no distingo entre 3g o wifi, sin embargo, hay alguna implementación que esta información (wifi o 3g) podría ser útil