2009-09-11 6 views
0

J'ai une application qui fonctionne bien, mais depuis que j'ai mis à jour OS3.1 et mis à jour le SDK, l'application ne parvient pas à se connecter sur un serveur distant, en transmettant une chaîne de connexion au Fonction stringWithContentsOfUrl. Avant la mise à jour, cela fonctionnait correctement, et si je copiais la chaîne de texte affichée dans l'instruction NSLog et que je la collais dans un navigateur, j'obtenais la bonne réponse, mais elle répondait avec "LOGIN_ERROR" indiquant échec.stringWithContentsOfUrl défaillant après la mise à jour vers OS3.1

Avez-vous une idée de la raison pour laquelle cela échoue maintenant et comment y remédier?

NSString* userName = [[NSUserDefaults standardUserDefaults] stringForKey:@"username_pref"]; 
    NSString* password = [[NSUserDefaults standardUserDefaults] stringForKey:@"password_pref"]; 
    NSString* loginUrl = [NSString stringWithFormat:@"https://website.com/API/login?email=%@&password=%@", userName, password]; 

    NSLog (@"Logging in as %@ using %@ at [%@]", userName, password, loginUrl); 

    NSURL* url = [NSURL URLWithString:loginUrl]; 
    NSString* loginDetails = [NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:nil]; 

    if ([loginDetails compare:@"\"LOGIN_ERROR\""] == NSOrderedSame) 
    { 
     DLog (@"Login Failed : LOGIN_ERROR"); 
     self.isLoggedIn = NO; 
    } 
    else 
    { 
     DLog (@"Login Success"); 
     if (userDetails) { 
      [userDetails release]; 
     } 

     NSDictionary* jsonData   = [loginDetails JSONValue]; 

     userDetails      = [[[DMUserDetails alloc] init] retain]; 
     userDetails.id     = [[jsonData objectForKey:@"id"] intValue]; 
     userDetails.api_token   = [jsonData objectForKey:@"api_token"]; 
     userDetails.full_name   = [jsonData objectForKey:@"full_name"]; 
     userDetails.mobile_number  = [jsonData objectForKey:@"mobile_number"]; 
     userDetails.mobile_host   = [jsonData objectForKey:@"mobile_host"]; 
     userDetails.email    = [jsonData objectForKey:@"email"]; 
     userDetails.twitter    = [jsonData objectForKey:@"twitter"]; 
     userDetails.jabber    = [jsonData objectForKey:@"jabber"]; 
     userDetails.msn     = [jsonData objectForKey:@"msn"]; 
     userDetails.start_page   = [jsonData objectForKey:@"start_page"]; 
     userDetails.date_format   = [[jsonData objectForKey:@"date_format"] intValue]; 
     userDetails.time_format   = [[jsonData objectForKey:@"time_format"] intValue]; 
     userDetails.sort_order   = [[jsonData objectForKey:@"sort_order"] intValue]; 
     userDetails.timezone   = [jsonData objectForKey:@"timezone"]; 
     userDetails.tz_offset   = [jsonData objectForKey:@"tz_offset"]; 
     userDetails.premium_until  = [jsonData objectForKey:@"premium_until"]; 
     userDetails.default_reminder = [jsonData objectForKey:@"default_reminder"]; 

     self.isLoggedIn = YES; 
    } 

    [self performSelectorOnMainThread:@selector(didFinishLogon) withObject:nil waitUntilDone:NO]; 
+0

vous pouvez regarder les journaux du serveur Web, si vous avez une possibilité. – Eimantas

+0

Malheureusement ce n'est pas mon serveur web, donc ce n'est pas possible – Xetius

+0

Le code me semble bon. Le message de retour a-t-il changé, peut-être entre différents serveurs? – Jordan

Répondre

0

Le problème le plus probable est que loginDetails est nul, ce qui indique une erreur récupérer l'URL, plutôt que de vous recevoir en fait une réponse « ERREUR LOGIN ». Passer un objet d'erreur et enregistrer l'erreur.

+0

Le serveur renvoie la chaîne "LOGIN_ERROR" en cas d'échec, mais l'URL à laquelle j'accède est correcte. Si je copie et colle la chaîne du journal dans un navigateur, cela fonctionne très bien. – Xetius

0

Essayez:

NSError *error = nil; 
NSString *loginDetails = [NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:&error]; 

if (error != nil) { 
    NSLog(@"%@", error); 
} 
1

Si votre nom d'utilisateur est une adresse e-mail et a un arobase (@) en elle, avez-vous essayé d'échapper à l'arobase dans l'URL en utilisant% 40 au lieu de @?

Questions connexes