[projet] dev webservices pour apli iphone precision sur les sessions

guetwebguetweb Membre
04:18 modifié dans Vos applications #1
Bonjour à  tous,

Le titre est un peu lourd mais il résume assez bien la situation.
J'ai développé un site style réseau social (www.pixrider.com) et nous sommes en train de créer l'appli iphone correspondant.
Je suis chargé de développer les script du webservice permettant à  l'appli de dialoguer avec la BDD et au client de se connecter a son compte.
Je suis pour cela en relation à  distance avec un développeur iphone.

Sur le site j'utilise un système d'authentification basé sur les sessions (id de session est passé de pages en pages via un cookie). Je pensais utiliser le même système pour gérer les connexions venant de l'iphone.

Mais le développeur iphone, me répond que l'iphone est un client lourd et ne gère pas les sessions et les cookies. Il m'a semblé en parcourant votre forum comprendre le contraire, mais ne connaissant rien au dev iphone je me suis peut être trompé.

Voici donc ma question.
Si coté webservice je crée une session l'iphone reçoit-il en même temps que la réponse json le cookie contenant id de session, et le renvoi-t-il lors des prochaines requêtes faites au script du webservice?

Pouvez vous m'éclairer de vos lumières, en tant que spécialistes du développement Iphone.

Merci beaucoup.

Arnaud.

Réponses

  • AliGatorAliGator Membre, Modérateur
    04:18 modifié #2
    Hello et Bienvenue

    Oui tout à  fait l'iPhone gère parfaitement les cookies de session sans problème. Je l'utilise tous les jours dans mon application FoodReporter, une fois l'utilisateur connecté, la session est créée et conservée (donc y'a rien à  faire de mon côté, elle est automatiquement renvoyée).

    En fait tout ce qui est fait au niveau des requêtes iPhone passe par la même couche réseau, que ce soit le navigateur intégré Safari, une WebView que tu intègres à  ton application pour afficher une page web dedans, ou une NSURLRequest (la classe qui permet, sous iPhone, de faire des requêtes réseau). Et cette couche réseau gère automatiquement les cookies et les sessions.

    Donc si tu fais une NSURLRequest vers un WebService, qui crée une session (session_start() en PHP genre) et prévois des cookies et tout, si plus tard tu refais une autre NSURLRequest vers le même WebService, le cookie de session sera automatiquement renvoyé, le développeur iPhone n'a rien à  faire pour gérer tout ça d'ailleurs. S'il te dit le contraire c'est qu'il ne connais pas bien son domaine.
  • guetwebguetweb Membre
    04:18 modifié #3
    Merci beaucoup de ta réponse rapide, AliGator!!!

    J'avais donc bien saisi. Je suis aux anges car de mon coté je n'ai pas tout a refaire, et visiblement du sien il n'a rien a faire non plus.  :D

    Petite question supplémentaire, est il possible de tester tout cela dans l'émulateur?
    Je veux dire par la que pour l'instant on teste les script un par un est il possible de tester via l'émulateur plusieurs requêtes d'affilées, par exemple (et au hasard  ;) ) faire une requête sur le script de connexion puis une sur un script demandant une authentification?
  • AliGatorAliGator Membre, Modérateur
    04:18 modifié #4
    Oui aucun pb
  • guetwebguetweb Membre
    04:18 modifié #5
    Merci beaucoup!

    Je vais tester ca et je reviendrais pour parler de notre appli a la communauté ;)

    A bientôt alors!

    PS: Est il d'usage de mettre un petit [RESOLU] dans le titre lorsque l'on a trouvé ce que l'on est venu cherché?
  • hedihedi Membre
    04:18 modifié #6
    BONJOUR  a tous
    Je me permet de m'immiscer dans cette discussion et plus précisément je m'adresse a AliGator.
    En fait moi je suis complètement nouveau dans ce domaine et la dans mon appli je veux communiquer avec une base MySQL.
    Dans cette base je veux récupérer les données  concernant des collaborateurs.
    En fait ce n'ai pas moi qui va créer les WS donc j'ai demandé à  un collègue de me les créer et de me renvoyer les données dans un fichier JSON.
    Par contre de mon côté je ne sais absolument pas comment "consommer" ce WS c'est à  dire côté objectiveC je n'ai pas trouvé ni tutos ni exemples qui précisent concrètement ça.
    Je ne sais pas si j'ai bien compris, mais lui en quelque sortes il va m'envoyer les données dans une adresse url (j'ai déjà  manipulé des flux rss par contre je ne sais pas si c'est la même chose.) sous format JSON et après moi je n'ai que parser ce fichier.

    UN peu plus de précision s'il vous plaà®t
    MERCI
  • AliGatorAliGator Membre, Modérateur
    04:18 modifié #7
    Tu envoies une requête à  ton WS, ce WS va te retourner la réponse au format JSON (quand tu faisais du RSS le format c'était du XML, bah là  ça sera du JSON).
    Après il te suffit de parser ce JSON (bien plus facile que du XML grâce à  des framworks comme SBJSON trouvables sur le net) pour récupérer des NSObject (NSDictionary, NSArray, NSString, etc) correspondants.

    Plus d'infos sur le format json sur json.org
    Mais si tu utilises la lib SBJSON tu n'as mm pas besoin de te soucier de comprendre le format JSON, tu suis les exemples fournis avec SBJSON et c'est tout.
    Pour le reste, Google est ton ami.
  • hedihedi Membre
    04:18 modifié #8
    Salut Aligator
    Merci pour tes réponses
    Mais j'ai encore une petite précision à  savoir
    Comment je peux formaliser ma requete pour parser le fichier se triouvant dans une url sécurisée
    En fait on sécurise l'acces a la base de donnée donc la je suis embetté car je veux parser des fichier sécurisés.
    Merci pour ta réponse
  • AliGatorAliGator Membre, Modérateur
    04:18 modifié #9
    Je vois pas le rapport entre des requêtes sécurisées (par quoi ? SSL/HTTPS ? Jeton SHA1 ? apiKey ?) et donc la récupérer de ton JSON par un canal sécurisé d'un côté, et le parsing de ce JSON de l'autre.

    Tu commences par faire une requête vers une URL. Que cette URL te retourne en réponse une image, du code HTML, du JSON, du XML genre flux RSS, ou un mp3 ou un document PDF, ça change rien. Il te retourne des données (NSData). C'est au moment d'émettre cette requête que tu as la sécurisation (enfin si tu utilises SSL ou si tu utilises une BasicAuth, vois ça avec celui qui fait le WS de toute façon).
    Après, quand tu as reçu, de manière sécurisée (soit sécurisation à  l'accès genre BasicAuth, soit lors du transfert avec un tunnel SSL) tes données, tu n'as plus qu'à  interpréter ces données (NSData) reçues. Si c'est une image que tu attends tu vais construire une UIImage avec imageWithData, si c'est un XML tu vas le parser avec un NSXMLParser, si c'est du JSON bah tu vas utiliser SBJSON pour le parser. Le fait que ces données, quelles qu'elles soient, viennent d'une source sécurisée ou non n'y changera rien.
  • hedihedi Membre
    04:18 modifié #10
    Ok merci Aligator
    En fait j'ai un peu avancé sur mon sujet
    Voici le code tout d'abord du parsage de mon fichier JSON qui est sur une URL en HTTPS :
    @implementation collabNameViewController<br /><br />- (void)viewDidLoad<br />{<br />	[super viewDidLoad];<br />	<br />	responseData = [[NSMutableData data] retain];<br />	NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@&quot;https://mon_adresse_serveur/list_collab_json.php?key=clé_secrete&quot;]];<br />	[[NSURLConnection alloc] initWithRequest:request delegate:self];<br />}<br /><br />- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response<br />{<br />	[responseData setLength:0];<br />}<br /><br />- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data<br />{<br />	[responseData appendData:data];<br />}<br /><br />- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error<br />{<br />	label1.text = [NSString stringWithFormat:@&quot;Connection failed: %@&quot;, [error description]];<br />}<br /><br />- (void)connectionDidFinishLoading:(NSURLConnection *)connection<br />{<br />	[connection release];<br />	<br />	NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];<br />	[responseData release];<br />	<br />	NSError *error;<br />	SBJSON *json = [[SBJSON new] autorelease];<br />	NSArray *collaborateurs = [json objectWithString:responseString error:&amp;error];<br />	[responseString release];<br />	<br />	NSLog(@&quot;luckyNumber = &quot;, responseString);<br />	<br />	if (luckyNumbers == nil)<br />		label1.text = [NSString stringWithFormat:@&quot;JSON parsing failed: %@&quot;, [error localizedDescription]];<br />	else<br />	{<br />		NSMutableString *text = [NSMutableString stringWithString:@&quot;Les SQliens:&#092;n&quot;];<br />		<br />		for (int i = 0; i &lt; [lcollaborateurs count]; i++)<br />			[text appendFormat:@&quot;%@&#092;n&quot;, [lcollaborateurs objectAtIndex:i]];<br />		<br />		label1.text =&nbsp; text;<br />		NSLog(@&quot;text = &quot;, text);<br />	}<br />}<br /><br /><br /><br />- (void)dealloc<br />{<br />&nbsp; &nbsp; [super dealloc];<br />}<br /><br />@end<br /><br />@implementation NSURLRequest(DataController)<br />+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host<br />{<br />	return YES;<br />}<br />@end
    


    Voila la le souci je veux créer une table view et mettre sur chaque ligne un collaborateur (nom et prenom)
    J'ai crée un Objet collaborateur bien sur

    Mais en fait quand je suis dans la console rien ne s'affiche
    J'ai fait le test en mettant mes donnée dans un label sur l'écran, ca s'affiche bien mais je n'ai pas pu mettre ca dans un tableau pour pouvoir remplir ma liste.
    Est ce que tu vois pas comment on peut avancer stp
    Merci pour ton retour.
  • laudemalaudema Membre
    04:18 modifié #11
    dans 1306923336:


    Mais en fait quand je suis dans la console rien ne s'affiche



    Veux tu dire que
    <br />NSLog(@&quot;luckyNumber = &quot;, responseString);<br />
    

    N'affiche que "luckyNumber = " ?
    ça semble pourtant logique !
  • hedihedi Membre
    04:18 modifié #12
    Il m'affiche luckyNumber =
    et rien
    pourquoi c'est logique..
    En fait je veux mettre mes données dans un tableau mais normalement si je les parse bien
    au moins ils sont affichés correctement dans un tableau.
    MAis rien ne s'affiche et pourtant quand j'ai utilisé un label dans ma xib pour les faire afficher, ils se sont bien afficher??
    Any help please??
  • laudemalaudema Membre
    juin 2011 modifié #13
    dans 1307089093:

    pourquoi c'est logique..

    Parce qu'avec un specifier comme %@ il affiche (NULL) si reponseString == nil, mais sans %@ il n'affiche rien. Le compilateur lui ne dit rien, il ne moufte que pour les specifiers sans argument.
Connectez-vous ou Inscrivez-vous pour répondre.