1 votes

iPhone SDK : Comment envoyer des données à un serveur via Internet ?

J'ai écrit une application gps pour l'iphone et tout fonctionne bien mais maintenant je veux envoyer la latitude et la longitude à un serveur sur internet en utilisant la manière la plus simple... J'ai une url du serveur dans laquelle il y a des paramètres pour la latitude et la longitude. Je veux aussi que la latitude et la longitude soient envoyées toutes les 90 secondes environ. Comment tout cela se fait-il exactement ? Toute aide est très appréciée, merci d'avance !

4voto

mvds Points 26475
NSURL *cgiUrl = [NSURL URLWithString:@"http://yoursite.com/yourscript?yourargs=1"];
NSMutableURLRequest *postRequest = [NSMutableURLRequest requestWithURL:cgiUrl];

/* leave the rest out if just issuing a GET */
NSString *postBody = @"yourpostbodyargs=1";

NSString *contentType = @"application/x-www-form-urlencoded; charset=utf-8";
int contentLength = [postBody length];

[postRequest addValue:contentType forHTTPHeaderField:@"Content-Type"];
[postRequest addValue:[NSString stringWithFormat:@"%d",contentLength] forHTTPHeaderField:@"Content-Length"];
[postRequest setHTTPMethod:@"POST"];
[postRequest setHTTPBody:[postBody dataUsingEncoding:NSUTF8StringEncoding]];
/* until here - the line below issues the request */

NSURLConnection *conn = [NSURLConnection connectionWithRequest:postRequest delegate:self];

traiter les erreurs et les données reçues en utilisant :

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    // data has the full response
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    contentLength = [response expectedContentLength];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)newdata
{
    [data appendData:newdata];
}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
}

vous devez configurer certaines variables, telles que data, contentLength, etc. Mais c'est le schéma général de l'interaction http.

Vous pouvez vouloir mettre toutes les manipulations dans une classe de gestionnaire séparée, j'ai changé le délégué en self donc c'est plus autonome.

Pour ce qui est du timing, utilisez un NSTimer pour invoquer l'enregistrement des données toutes les 90 secondes :

[NSTimer scheduledTimerWithTimeInterval:90 target:self selector:@selector(xmitCoords) userInfo:nil repeats:YES];

1voto

makdad Points 4670

Je pense que la réponse ci-dessus a la bonne idée - mais essayez d'utiliser ASIHTTPRequest . Une excellente bibliothèque, qui permet d'abstraire tout ce code HTTP désordonné de votre programme.

Autre chose à noter : les coordonnées GPS toutes les 90 secondes vont épuiser votre batterie très rapidement - faites-vous cela uniquement à des fins de test ?

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