4.1 Appel d’un web service en JSON

Objectif et quelques explications :

Développer une application mobile communicante, sous entend très souvent des appels sur le web, notamment sous forme de services web.
Pour ce faire iOS propose des classes spécifiques ainsi que des délégués.
Le sujet suivant va vous expliquer en plusieurs étapes comment mettre en œuvre ces mécanismes au sein d’une application IPhone.
L’application IPhone va proposer un simple bouton qui créera une connexion web sur le service JSON, récupérera les données et dé sérialisera ces dernières.

Version XCode et iOS : XCode version 4.5.2 et iOS version 6.1.

Partie 1

Dans cette première partie nous allons :

1. Créer une application iOS Single View avec XCode
2. Implémenter les méthodes importantes du protocole NSURLConnectionDelegate pour gérer la communication.

Le film ci-après décrit les manipulations pour créer un projet ‘Single View’, implémente le protocole sur la classe du contrôleur et implémentation 4 méthodes importantes dans le contrôleur (callbacks).

Partie 2

La seconde partie montre comment ajouter une donnée membre privée à la classe contrôleur, du type NSMutableData.
Cette dernière est couramment utilisée pour gérer des données binaires ou non identifiées (type octets). On utilise cette classe notamment pour récupérer toute donnée venant de l’internet comme une image, un son, un flux JSON, etc.
Dans ce partie nous allons dans le code du bouton crée le code établissant la connexion web.
Pour ce faire nous utiliserons les classes : NSURL, NSURLRequest, NSURLConnection.

Partie 3

Nous allons dans cette partie utiliser le membre privé du contrôleur du type NSMutableData pour récupérer les données web.
Au fur et à mesure de la réception du flux nous utiliserons le message appendData: pour ajouter les données reçues dans notre NSMutableData.
Nous intercepterons la callback de fin de communication connectionDidFinishLoading:.

Partie 4

La dernière partie couvre le décodage de notre flux binaire reçu du web en format JSON.
Pour ce faire nous utiliserons la classe NSJSONSerialization et notamment le message isValidJSONObject: qui permettra la validité de notre flux.
Nous découvrirons un site internet permettant de visualiser aisément le flux JSON et de le comprendre.
Finalement nous afficherons le flux JSON dans la fenêtre de débogage.

Conclusion

La méthode utilisée ici gère les communications de manière asynchrone. J’insiste sur le fait de ne jamais bloquer le thread GUI d’iOS ce qui une très mauvaise pratique.
Il existe d’autres méthodes plus simple pour récupérer une donnée de manière asynchrone mais cette dernière à l’avantage de maîtriser la machine à état qui gère le protocole :
1. Une callback permet de décoder une erreur éventuelle.
2. Une callback permet de constater le début de la connexion web.
3. Une callback permet de recevoir par paquets les données.
4. Une callback signale la fin de la communication.

Lien sur le projet à télécharger
Projet XCode ici

Catégories
3 Comments
0 Pings & Trackbacks

Laisser un commentaire