web-dev-qa-db-fra.com

Comment utiliser l'accessibilité iOS

Je développe une application iPhone qui utilise le réseau. L'iPhone communique avec mon serveur via une requête HTTP et devrait fonctionner sur WiFi et 3G.
J'utilise actuellement NSURLConnection initWithRequest pour envoyer des demandes asynchrones à mon serveur et obtenir des réponses (mais je vais bientôt travailler avec la bibliothèque ASIHTTPRequest)

J'ai compris qu'avec ce type d'applications (applications nécessitant une connexion Internet), je devrais (devrais?) Utiliser l'accessibilité.

Après avoir cherché sur le Web et consulté l'exemple de code d'accessibilité d'Apple, je ne comprends toujours pas certaines choses de base:

Quels sont les principaux objectifs de l'accessibilité?

Dans l'exemple d'Apple, ils détectent les problèmes de réseau avec l'hôte, le WiFi et la 3G et présentent à l'utilisateur un message approprié.
Est-ce le but principal de l'accessibilité, de montrer à l'utilisateur un message? Ou dois-je l'utiliser pour d'autres scénarios plus pratiques? Par exemple, si la requête NSURLConnaction a échoué, dois-je utiliser la joignabilité d'une manière ou d'une autre pour renvoyer la requête?

Quelle est la bonne utilisation de l'accessibilité?

Est-il courant d'utiliser uniquement ne instance lors du lancement de l'application, puis d'écouter les modifications du réseau? Ou dois-je vérifier moi-même l'état de l'accessibilité avant chaque demande de réseau?
Est-ce suffisant d'utiliser reachabilityWithHostName ou ai-je besoin également de reachabilityForLocalWiFi et reachabilityForInternetConnection?

Encore une chose, j'ai compris Apple peut rejeter les applications qui utilisent le réseau et n'utilisent pas l'accessibilité.
Quelles sont les méthodes "must" que je dois implémenter?
Sera-t-il suffisant de simplement informer l'utilisateur qu'il n'y a actuellement pas d'Internet?

34
Eyal

Reachability est une classe utilitaire d'assistance réseau, elle est utilisée pour obtenir diverses informations sur l'état de la connexion

Quels sont les principaux objectifs de l'accessibilité?

  • L'accessibilité est utilisée pour interroger l'état du réseau
  • et d'enregistrer vos auditeurs pour être informé lorsque la connectivité change

Est-ce le but principal de l'accessibilité, de montrer à l'utilisateur un message?

Non bien sûr, son utilisation principale est soit de tester s'il y a une connectivité Internet, soit d'être averti si la connectivité change

Par exemple, si la demande NSURLConnaction a échoué, dois-je utiliser Accessibilité pour renvoyer la demande?

Oui, vous pouvez l'utiliser, par exemple ce que je fais normalement dans mon projet est de sauvegarder toute la demande qui a été faite sur un serveur distant, disons que je veux télécharger 10 fichiers,

Lorsqu'un fichier échoue au processus de téléchargement en raison de l'absence de connexion Internet, je les enregistre dans un tableau de téléchargements ayant échoué,

Lorsque l'accessibilité m'informe que la connexion Internet a été rétablie, j'itère à travers ce tableau et recommence le processus de téléchargement

Quelle est la bonne utilisation de l'accessibilité?

Cela dépend de vos habitudes et de vos besoins.

Est-il courant d'utiliser une seule instance lors du lancement de l'application, puis d'écouter les modifications du réseau?

Oui, c'est ce que je fais, dans mes projets, je n'ai qu'une seule instance d'une classe de gestionnaire de téléchargement, et cette classe a la seule instance vivante de Reachability

Ou dois-je vérifier moi-même l'état de l'accessibilité avant chaque demande de réseau?

Vous pouvez le faire sans avoir plusieurs instances de classes d'accessibilité, ce que je fais normalement, c'est d'avoir une méthode dans mon gestionnaire de téléchargement qui me dit d'utiliser Reachability s'il y a une connexion ou non.

Est-il suffisant d'utiliser reachabilityWithHostName ou ai-je besoin également de reachabilityForLocalWiFi et de reachabilityForInternetConnection?

Je ne suis pas sûr de celui-ci, mais ce que je fais normalement, c'est de tester la connectivité sur tous les moyens, je ne fais pas de différence entre 3g ou wifi, mais il y a une certaine implémentation que ces informations (wifi ou 3g) pourraient être utiles

47
Omar Abdelhafith

Reachability est un exemple de projet créé par Apple. Les gens l'utilisent comme une API sur le framework SystemConfiguration. Comme vous l'avez déjà vu, il existe des méthodes pour vérifier si un hôte est accessible et ainsi de suite.

La façon dont j'utilise le projet Reachabilty est que j'ai créé une classe avec une méthode de classe qui renvoie un booléen si l'hôte dont je demande des données est disponible. Si c'est le cas, la méthode retourne YES et si ce n'est pas le cas, elle retourne NO (évidemment).

Maintenant, dans l'application où j'utilise les connexions dont vous avez besoin/devez vérifier s'il est possible de démarrer une connexion comme l'indique la documentation Apple Apple. J'ai un simple if puis afficher un message d'alerte approprié indiquant que la demande n'a pas pu être traitée pour le moment.

Il n'y a aucune exigence que vous devez réessayer automatiquement si la demande n'a pas pu être exécutée la première fois. Le but principal de ceci est de garder votre application à l'abri du plantage, et en même temps, donner à l'utilisateur un message indiquant que cela n'a pas pu être fait.

Je n'utilise pas les notifications moi-même, mais c'est parce que je ne suis pas intéressé à vérifier si la connexion peut être établie ou non. C'est quelque chose que vous devrez décider en fonction des demandes de votre application.

Vous n'êtes pas obligé d'utiliser toutes les méthodes de la classe Reachablitiy, il suffit d'en utiliser une. Il est documenté ce que les différentes méthodes offrent et quand elles doivent être utilisées dans le fichier d'en-tête.

N'oubliez pas d'inclure le framework SystemConfiguration.

12
Andreas

L'accessibilité permet de deviner si Internet est accessible ou non. Il vous indique si vous avez accès via WiFi ou si vous avez uniquement accès via Mobile Data. Il n'y a aucune garantie que c'est correct. S'il indique que vous disposez d'une connexion WiFi, cette connexion peut être perdue une seconde plus tard. La seule façon de savoir si l'accès à une URL fonctionnera ou non est de faire cet accès et de voir ce qui se passe. Il y a des situations où l'accès fonctionne lorsque Reachability dit que ce n'est pas le cas et vice versa.

Voici pourquoi j'utilise Reachibility: après l'échec des téléchargements car il n'y avait pas de connexion Internet, je vais recommencer lorsque Reachability détecte un changement (en fait quelques secondes plus tard; l'accès URL échoue souvent immédiatement après que Reachability a dit que le WiFi revient). Après l'échec des téléchargements là où les données mobiles ont été interdites, vérifiez si les données mobiles sont disponibles, puis demandez à l'utilisateur d'autoriser l'utilisation des données mobiles.

0
gnasher729