8
votes

In my app iam using web view with URL:@"http://www.gmail.com/".

  • This web view was loaded when i clicked a button in the main page / home page

    (IBAction)webClick:(id)sender
     {
    MailViewController *mail = [[MailViewController alloc]initWithNibName:@"MailViewController" bundle:nil];
    [self.navigationController pushViewController:mail animated:YES];
    }
    
  • Then the web view was loaded, i used code like thin this in mail view:

    -(void)viewDidLoad
    
    {
        [super viewDidLoad];
        NSString *urlAddress = @"http://www.gmail.com/";
        NSURL *url = [NSURL URLWithString:urlAddress];
        NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
        [webView loadRequest:requestObj];
    }
    

Here the gmail opened with login page. we need to enter username & password.

What i want is,

  • if we already login into my account through gmail application..

    The loaded view directly loades my mail, instead of login page.

  • if i didn't already loged in, then show an alert as please login.

How to do it?

Please help me. Thanks in advance.

1

1 Answers

22
votes

First of all, I think the URL you should be loading is http://mail.google.com/mail

Other than that, you're not getting normal gmail behavior because UIWebView does not save cookies between app runs, you should try something like this to save them:

- (void)saveCookies
{
    NSData         *cookiesData = [NSKeyedArchiver archivedDataWithRootObject: [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]];
    NSUserDefaults *defaults    = [NSUserDefaults standardUserDefaults];
    [defaults setObject: cookiesData forKey: @"cookies"];
    [defaults synchronize];
}

and load them back using this:

- (void)loadCookies
{
    NSArray             *cookies       = [NSKeyedUnarchiver unarchiveObjectWithData: [[NSUserDefaults standardUserDefaults] objectForKey: @"cookies"]];
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];

    for (NSHTTPCookie *cookie in cookies)
    {
        [cookieStorage setCookie: cookie];
    }
}