39 votes

iPhone SDK Détection de la connexion Internet

Je travaille sur un iPhone qui fait quelques appels à des services web. J'ai posté cette application sur l'Apple store mais elle a été rejetée (à juste titre) car il n'y avait pas de message d'erreur affiché à l'utilisateur si aucune connexion Internet n'est disponible. Puisqu'évidemment l'application ne fonctionnerait pas sans elle.

Je voulais donc savoir comment y parvenir au mieux. J'imagine que quelque chose doit aller dans la section viewDidLoad qui lancera une boîte d'alerte disant quelque chose comme "Vous avez besoin d'une connexion Internet pour utiliser cette application".

Toute idée serait appréciée.

48voto

Andrew Grant Points 35305

Si votre application doit avoir un accès réseau, le plus simple est d'ajouter les paramètres suivants à votre info.plist sous forme de valeurs booléennes.

  • SBUsesNetwork - S'assurer que l'appareil a une connexion active. (Edit : non applicable, cela semble être une API privée que quelqu'un a trouvé à un moment donné. Elle n'est pas dans la documentation des développeurs d'Apple).
  • UIRequiresPersistentWiFi - S'assure que l'appareil est connecté via WiFi

Si votre choix n'est pas vrai, l'utilisateur recevra un message approprié au démarrage de votre application. Mieux encore, ce message provient du système d'exploitation et est donc localisé.

Si votre application ne peut pas télécharger de données à partir d'un site web en cours d'exécution (perte de signal, site hors service), vous devez tout de même avertir l'utilisateur et ne pas vous contenter de tourner indéfiniment.

1 votes

Faut-il attribuer une valeur à "SBUsesNetwork" ou simplement l'ajouter comme clé ? Je ne trouve aucune documentation à ce sujet dans le SDK de l'iPhone ou sur le site d'assistance aux développeurs d'Apple :-(

0 votes

Ils sont tous deux booléens et doivent donc être mis à true.

7 votes

Corrigez-moi si je me trompe, mais ces paramètres semblent avoir des limites. SBUsesNetwork ne provoque une alerte que si le téléphone est en mode avion. UIRequiresPersistentWiFi ne provoque une alerte que si le WiFi est activé mais non connecté. Aucun de ces paramètres ne semble provoquer d'alerte si l'utilisateur a désactivé le WiFi.

28voto

Alex Reynolds Points 45039

Apple Developer Connection propose un exemple d'application ( Accessibilité ) qui utilise le cadre de configuration du système pour déterminer l'état du réseau. Il vous dira si vous avez une connexion WiFi, EDGE/3G ou aucune connexion Internet.

Vous utiliserez des portions de ce code dans votre application pour déterminer l'état du réseau, puis fournir des indications à l'interface si aucune connexion n'est disponible, comme un UIAlertView .

2 votes

J'ai fait une note sur Reachability ici : stackoverflow.com/questions/181485/

1 votes

Il y a un bon remaniement de l'échantillon Apple Reachability ici : blog.ddg.com/?p=24 Il a été conçu pour être utilisé dans les mêmes conditions. Il en a pris soin (bien plus qu'Apple) et j'ai utilisé avec succès son implémentation de Reachability sans aucun problème. Notez que si vous utilisez la bibliothèque ASIHTTP, la réécriture de Reachability mentionnée ci-dessus fait partie de celle-ci.

0 votes

Je suis en train d'utiliser reachability mais cela pose un problème car il affiche une alerte plus d'une fois et cela m'irrite vraiment.

4voto

occulus Points 10906

Mise en garde : méfiez-vous de SBUsesNetwork. Personnellement, j'aimerais bien savoir d'où vient SBUsesNetwork, car il n'est mentionné nulle part dans la documentation d'Apple que je puisse trouver. Lorsque j'ajoute la clé au plist de mon application (en tant que booléen) et que je lui attribue la valeur true, cela ne semble pas affecter le comportement de mon application - je n'obtiens aucun avertissement concernant le mode avion, que ce soit en redémarrant complètement l'application ou en mettant au premier plan un lancement précédent qui était en arrière-plan.

Dans mon application, UIRequiresPersistentWifi est réglé sur true, ce qui semble également faire le travail que les gens prétendent que SBUsesNetwork fait (plus d'autres choses !).

(J'utilise iOS4.2.1 sur un iPhone 4, XCode 3.2.5 64 bit).

0 votes

Ah, c'est intéressant : blogs.oreilly.com/iphone/2008/11/ -- le gars a trouvé SBUsesNetwork par des trucs d'ingénierie de reverese. Cette clé SBUsesNetwork pourrait en fait être une API privée qui n'est pas destinée à la consommation publique ?

0 votes

Ah, OK, je crois que j'ai trouvé la solution. UIRequiresPersistentWifi fait fait le travail que les gens prétendent que SBUsesNetwork fait -- c'est-à-dire avertir du mode avion -- mais vous devez comprendre que vous n'obtenez l'avertissement du mode avion qu'une seule fois pour une application pendant une activation du mode avion -- même si vous arrêtez et relancez correctement une application, si vous avez déjà été averti du mode avion auparavant (et que vous êtes toujours en mode avion), il ne vous avertira pas à nouveau. Donc, pour résumer : SBUsesNetwork ressemble à un hareng rouge, ignorez-le. (Si quelqu'un peut m'indiquer les docs pour SBUsesNetwork, merci de le faire).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X