2009-02-27 30 views
39

Estoy trabajando en una aplicación iPhone que realiza algunas llamadas a servicios web. Publiqué esta aplicación en la tienda de Apple pero se rechazó (y con razón) ya que no se mostró ningún mensaje de error al usuario si no hay conexión a Internet disponible. Dado que, obviamente, la aplicación no funcionaría sin ella.iPhone SDK Detección de conexión a Internet

Así que solo quería saber cómo lograr esto? Supongo que algo tiene que ir en el método viewDidLoad que arrojará un cuadro de alerta que diga algo así como "Necesitas una conexión a Internet para usar esta aplicación".

Cualquier idea sería apreciada.

Respuesta

48

Si su aplicación debe tener acceso a la red, la forma más fácil es agregar las siguientes configuraciones a su info.plist como valores booleanos.

  • SBUsesNetwork - Asegúrese de que el dispositivo tiene una conexión activa :
  • UIRequiresPersistentWiFi - (Edit no aplicable, esto parece ser una persona API privada encontrado en algún momento no se encuentra en la documentación de desarrolladores de Apple.). Garantiza que el dispositivo esté conectado a través de WiFi

Si su elección no es verdadera, se le presentará al usuario un mensaje apropiado al iniciar su aplicación. Lo mejor de todo es que este mensaje proviene del SO y, por lo tanto, está localizado.

Si su aplicación no puede descargar datos de un sitio web mientras se ejecuta (pérdida de señal, sitio inactivo), debe advertir al usuario y no solo girar indefinidamente.

+0

¡Un gran consejo, gracias! –

+0

excelente. Gracias. – givp

+1

¿Tiene que asignar un valor a "SBUsesNetwork" o simplemente agregarlo como clave? No encuentro ninguna documentación en el SDK de iPhone o en el sitio de Apple Developer Support :-( –

28

Apple Developer Connection tiene una aplicación de muestra (Reachability) que usa el marco de Configuración del sistema para determinar el estado de la red. Le dirá si tiene WiFi, EDGE/3G o no tiene conexión a Internet.

Utilizará partes de este código en su aplicación para determinar el estado de la red, y luego proporcionará claves de interfaz si no hay conexión disponible, como UIAlertView.

+0

Genial. Intentaremos eso. Gracias – givp

+2

Hice una nota sobre Accesibilidad aquí: http://stackoverflow.com/questions/181485/determining-when-an-edge-connection-comes-back-after-a-dropout-on-an-iphone –

+1

Hay un Buen repaso del ejemplo de Apple Reachability aquí: http://blog.ddg.com/?p=24 Está diseñado para ser un complemento fácil. Él se preocupó un poco (mucho más que Apple) y utilicé con éxito su implementación de Accesibilidad sin ningún problema. Tenga en cuenta que si utiliza la biblioteca ASIHTTP, la reescritura de Accesibilidad mencionada anteriormente se incluye como parte de eso. – occulus

4

Palabra de advertencia: tenga cuidado SBUsesNetwork. Personalmente, me encantaría saber de dónde venía SBUsesNetwork, porque no se menciona en ningún lugar de los documentos de Apple que pueda encontrar. Cuando agrego la clave a la lista de mi aplicación (como un booleano) y se establece en verdadero, no parece afectar el comportamiento de mi aplicación. No recibo ninguna advertencia sobre el modo avión, ya sea al iniciar la aplicación completamente de nuevo o al poner en primer plano una lanzamiento anterior que estaba en segundo plano.

Mi aplicación tiene UIRequiresPersistentWifi establecido en true, que parece hacer también el trabajo que las personas afirman que SBUsesNetwork (¡además de otras cosas!).

(estoy ejecutando iOS4.2.1 en un iPhone 4, XCode 3.2.5 de 64 bits).

+0

Ah, esto es interesante: http://blogs.oreilly.com/iphone/2008/11/hunting-down-infoplist-prefere.html - el chico encontró SBUsesNetwork por reverese cosas de ingeniería. ¿Esa clave SBUsesNetwork podría ser realmente una API privada que no está destinada al consumo público? – occulus

+0

Ah, bien, creo que he descifrado esto ahora. UIRequiresPersistentWifi * does * hace el trabajo que la gente reclama SBUsesNetwork, es decir, advierte sobre el modo avión, pero debe comprender que solo recibe una advertencia de modo de avión una vez para una aplicación durante una activación de modo avión, incluso si mata y relanzar una aplicación, si ya se le advirtió sobre el modo avión antes (y todavía está en modo avión), no lo advertirá nuevamente. Entonces, para resumir: SBUsesNetwork parece una pista falsa, ignórela. (Si alguien puede indicarme documentos para SBUsesNetwork, por favor) – occulus

Cuestiones relacionadas