2012-06-24 10 views
31

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 peticiones asíncronas a mi servidor y obtener respuestas (pero pronto voy a pasar a trabajar con ASIHTTPRequest biblioteca)Cómo usar iOS Accesibilidad

que entiende que con este tipo de aplicaciones (aplicaciones que requieren conexión a Internet) que debe (¿debe?) usar Accesibilidad.

Después de buscar en la web y mirando ejemplo de código de accesibilidad de Apple i todavía no entiendo algunas cosas básicas:

Cuál es el principal propósito de Accesibilidad?

En el ejemplo de Apple detectan problemas de red con el host, WiFi y 3G y 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 de cuando se inicia la aplicación, y luego escuchar los cambios de la red? ¿O debería verificar el estado de accesibilidad antes de cada solicitud de red?
¿Es suficiente usar reachabilityWithHostName o necesito también reachabilityForLocalWiFi y reachabilityForInternetConnection?

Una cosa más,, entendí que apple puede rechazar aplicaciones que usan la red y no usan Reachability.
¿Cuáles son los "debe" hacer los métodos que debo implementar?
¿Será suficiente notificar al usuario que actualmente no hay internet?

Respuesta

43

Reachability es una clase de utilidad de ayuda a la red, su utiliza para obtener diversas informaciones sobre el estado de la conexión

Cuál es el principal propósito de Accesibilidad?

  • de accesibilidad se utiliza para consultar el estado de la red
  • y dar de alta sus oyentes para informarse cuando la conectividad cambia

Es este el objetivo principal de Accesibilidad, para mostrar al usuario ¿un mensaje?

No, por supuesto, su uso principal es ya sea para probar si hay conectividad a Internet, o para ser notificado si la conectividad cambia

Por ejemplo, si la solicitud NSURLConnaction ha fallado necesito para utilizar Posibilidad de volver a enviar la solicitud?

Sí se podría utilizar, por ejemplo, lo que normalmente hago en mi proyecto es salvar todas las peticiones 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 matriz de descargas fallidas,

Cuando la accesibilidad me informa que la conexión a Internet se ha restaurado, recorro esta matriz y comienzo nuevamente el proceso de descarga

¿Cuál es el uso apropiado de Accesibilidad?

Depende de sus patrones y necesidades.

¿Es común usar solo una instancia cuando se inicia la aplicación, y luego escuchar a cambios de red?

Sí que es lo que hago, en mis proyectos sólo tengo 1 instancia de una clase gestor de descargas, y esta clase tiene el único ejemplo vivo de Accesibilidad

o debería comprobar yo mismo la accesibilidad estado antes de cada red solicitud?

Puede hacer eso sin tener varias instancias de clases de Accesibilidad, lo que normalmente hago es tener un método dentro de mi gestor de descargas que me indique que use Alcance si hay conexión o no.

¿Es suficiente usar reachabilityWithHostName o tengo que también reachabilityForLocalWiFi y reachabilityForInternetConnection?

Am no está seguro acerca de esto, pero lo que hago normalmente es para probar la conectividad en todos los medios, yo no distingue entre 3G o WiFi, sin embargo hay algunos aplicación que esta información (WiFi o 3G) podría ser útil

+0

Gracias por su respuesta, ¿puede verificar el "una cosa más" que agregué a la pregunta – Eyal

+1

Soy completamente consciente de eso, tengo más de 5 aplicaciones en la tienda de aplicaciones, todas usan Reachability, utilicé accesibilidad como yo descrito anteriormente en la respuesta, entonces no sé qué debe implementarse, normalmente implemento lo que necesito –

+1

Usted dijo que uno de los propósitos principales de la accesibilidad es "registrar a sus oyentes para que se informen cuando la conectividad cambie", pero lo hace no dar devoluciones de llamadas todas las veces (intente cambiar los enrutadores y verificar). –

12

Reachability es un proyecto de ejemplo que Apple ha realizado. 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 he creado una clase con un método de clase que devuelve un valor booleano si el host del que estoy solicitando datos está disponible. Si es así, el método devuelve YES y si no lo está, devuelve NO (obviamente).

Ahora, en la aplicación donde 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 if y luego muestro un mensaje de alerta apropiado de 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 se debe a que no estoy interesado en controlar si se puede o no realizar la conexión. Esto es algo que tendrá que decidir según las demandas de su aplicación.

No está obligado a utilizar 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 SystemConfiguration.

+0

Gracias por su respuesta, cuando verifique si el host está disponible antes de cada solicitud de red, ¿esto agregará una sobrecarga a cada solicitud? – Eyal

+0

Sí, pero eso debería ser mínimo. Sin embargo, no he notado ningún gasto notable de hacerlo. A las preguntas que agregaste ya las respondí, creo. No dude en preguntar si algo aún no está claro :) – Andreas

+0

Así que dime si entiendo bien, para obtener el mismo resultado pero con las notificaciones, mantendré algunas booleanas globales "HostIsAvailable", este booleano se actualizará cuando obtengo el Notificaciones de accesibilidad, luego, antes de cada solicitud de red, verificaré si es SÍ, si no mostraré al usuario un mensaje de alerta. – Eyal

0

La accesibilidad hace una mejor estimación 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 yo uso Reachibility para: Después de descargas fracasaron porque no había conexión a Internet, voy a empezar a volver a intentar cuando Accesibilidad detecta un cambio (en realidad, unos segundos más tarde, el acceso URL falla a menudo inmediatamente después de accesibilidad dice WiFi regresa) . 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.

Cuestiones relacionadas