2010-07-27 6 views
0

J'essaie de construire une application très simple, mais il s'avère être une tâche beaucoup plus difficile que l'on pourrait imaginer.Simple connexion Gmail via non-webview/navigateur HTTPS POST

-je utiliser une interface utilisateur simple, les deux champs de texte de base, UserName & PassWord (fait), et une fois sur le bouton de connexion est enfoncé, il se connecte à gmail (ou d'un compte Gmail d'entreprise) via un https POST (Je pense que tout l'accès Gmail est maintenant fait via 'https' seulement) et l'interface utilisateur se ferme, et Safari ouvre dans la boîte de réception, (pas dans la fenêtre de connexion).

N'existe-t-il aucun moyen de transmettre une poignée de socket ou des données de cookie à Safari? Ou même écrire un fichier temporaire qui peut être donné en paramètre à Safari, pour ouvrir ..?

J'ai passé trois jours solides essayant de construire d'autres bibliothèques open source, que je ne même pas besoin probablement, pour obtenir une pile d'erreurs de construction ...

Je suis en fait même pas sûr si les données correctes sont envoyées au serveur ...

Voici en gros ce que j'ai ... quelqu'un avec des idées ...?

NSString *urlString = @"https://www.google.com/LoginAction2?service=mail"; 

// setting up the request object now 
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
[request setURL:[NSURL URLWithString:urlString]]; 
[request setHTTPMethod:@"POST"]; 

NSString *contentType = [NSString stringWithFormat:@"application/x-www-form-urlencoded"]; 
[request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

NSMutableData *body = [NSMutableData data]; 
[body appendData:[[NSString stringWithFormat:@"action=https://www.google.com/LoginAction2?service=mail&"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"Email="] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:userName] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"&"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"Passwd="] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:passWord] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"&"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"continue=https://mail.google.com/&"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"PersistentCookie=yes&"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"signIn=\"Sign in\"&"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"media="] dataUsingEncoding:NSUTF8StringEncoding]]; 

[request setHTTPBody:body]; 
NSString *msgLength = [NSString stringWithFormat:@"%d", [body length]]; 
[request addValue: msgLength forHTTPHeaderField:@"Content-Length"]; 

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 

[pool release]; 

URLWithString:@"https://mail.google.com/"]]; 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: returnString]]; 

Répondre

0

http://code.google.com/apis/accounts/docs/OpenID.html

Google fournit le code pour les gens de le faire, mais tu ne vas pas être en mesure d'utiliser vos propres entrées; Imaginez les conséquences de ce genre d'échappatoire. Au lieu de cela, Google vous permet de rediriger l'utilisateur vers la page de connexion au compte Google et, en cas de succès ou d'échec, de revenir sur votre page.