2011-05-19 11 views
10

Editar 23.5.11Actualización de iPhone de accesibilidad en la red cambia

Ahora estoy preguntando si estoy sobre la ingeniería de esto. Cuando uso una conexión en línea, lo manejo bien - ya sea:

  • en el fondo con un indicador de progreso o actividad mostrar y si no funciona, me muestra un mensaje adecuado o

  • llamo otra aplicación, ya sea Safari o Maps, que luego hará su propia verificación y fallará si no hay conexión. Eso deja al usuario en esa otra aplicación que ha fallado, que no es perfecta aunque.

Así que si hago lo que estoy sugiriendo a continuación y el nivel de accesibilidad no devuelve alcanzable y luego tengo que hacer un NSURLConnection en caso de que los radios han ido a dormir, entonces no estoy seguro de que es mejor que cualquier solo tratando de obtener el recurso en línea en primer lugar.

Si alguien puede ayudar, estaría muy agradecido. Estoy casi listo para enviar, solo necesito hacerlo bien.

Estoy usando la muestra de accesibilidad de Apple para un buen efecto en general, excepto cuando la conexión móvil o celular se queda dormida y luego vuelve o el wifi se va y la conexión celular se basa.

Está bien cuando la conexión móvil (celular) no está cambiando. Esto está en línea con los comentarios que he leído, que cuando la radio celular se apaga, debe reactivarla manualmente. Sin embargo, no puedo ver cómo hacer eso.

¿Debo configurar un NSURLConnection? Un código de muestra sería genial. Cuando recibo una notificación de que no hay conexión, ¿enviaré NSURLConnection y le diré al usuario que intente de nuevo en un momento y luego, si recibo una devolución de llamada para decir que es exitosa, anulo la configuración de desactivado de Reachability?

Además, ¿tendría que hacer eso cuando parezca que no hay conexión, por si acaso es así? Esto parece un desperdicio de recursos cuando puede no ser eso. por ejemplo, un iPod Touch que no está en alcance wifi.

También he considerado la alternativa DDG, pero parece que tendrá el mismo problema.

Cualquier sugerencia útil sería bienvenida.

Gracias,

Chris.

Respuesta

13

No puede y no debe usar el código de muestra Reachabilty de Apple (o SCNetworkReachabilityFlags) para determinar si un recurso de red está o estará disponible. Le brindan herramientas útiles para dar a los usuarios comentarios sobre por qué falló una conexión y para determinar si se debe volver a intentar una conexión y cuándo. Sin embargo, si desea acceder a un recurso de red, debe solicitarlo.

No presente a sus usuarios con alertas de "ausencia de conexión de red" basadas en los indicadores de alcanzabilidad. Realice su solicitud de red y, si falla, compruebe los indicadores de accesibilidad y su propio historial de solicitudes para ver si debe informarle a su usuario que la solicitud falló o volver a intentarlo en silencio. No debería querer ni necesitar enviar correo basura al usuario con cada falla de red.Si falla una solicitud, intente reintentarla si el host parece estar accesible y solo informa un error al usuario después de un par de intentos o cuando las banderas de accesibilidad sugieran que ha perdido su conexión de red y no solo ha fallado una solicitud.

En cuanto a la reactivación de las radios del dispositivo, deberá equilibrar su deseo de intentar obtener recursos de la red, permitiendo que el dispositivo apague las interfaces de red para ahorrar energía. No sé qué intenta hacer tu aplicación, pero recomendaría permitir que el dispositivo se apague y luego tratar de conectar en respuesta a que un usuario le pida a la aplicación que busque nuevos datos. No veo un caso en el que desee reactivar una radio solo para darle al usuario una pista de que algún recurso de red puede o no ser accesible actualmente.

Ver https://devforums.apple.com/message/409618

La única manera de saber si un host está disponible es tratar de conectar con él. Si esa conexión falla, puede usar la accesibilidad para proporcionar retroalimentación al usuario y para guiar su mecanismo de reintento, pero no es una buena idea usar accesibilidad para realizar una verificación previa de una conexión.

El problema clave aquí es que la accesibilidad utiliza información local para determinar sus resultados. Esto no dice nada sobre el estado de Internet en general. Es posible que el servidor de origen esté inactivo, o que haya un número reducido de enlaces entre usted y el servidor de origen, y la accesibilidad indicará felizmente que es accesible. En ese punto, intentarás conectarte y la conexión fallará. Por lo tanto, tendrá que manejar el error de todos modos, lo que significa que también podría no hacer la verificación previa y permitir que su manejo de error estándar cubra también este caso.

también echar un vistazo a esta pregunta en relación con la comprobación de un recurso antes de cargarlo usando una aplicación externa: https://devforums.apple.com/message/411329

Haciendo una petición HEAD para el recurso debe darle una idea razonable si la aplicación externa será capaz de cargarlo sin necesidad de descargar una gran cantidad de datos (sin embargo, la latencia seguirá siendo una preocupación).

+1

Wow Jonah: respuesta agradable, clara y detallada. ¿Enseñas en alguna parte? –

+0

Sin embargo, puede usar el código de Accesibilidad para recibir notificaciones cuando cambie el "estado de accesibilidad". –

+0

Gracias @Jonah: esta es una gran respuesta definitiva. Creo que su claridad ayudará a mucha gente, como se puede ver por los votos que teníamos incluso antes de que respondiera. Voy a simplificar mi proceso significativamente ahora. Gracias de nuevo. – Chris

Cuestiones relacionadas