How to set my web view loaded with already login user -iPhone

10,054

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];
    }
}
Share:
10,054
iOS dev
Author by

iOS dev

Im an iOS developer

Updated on June 04, 2022

Comments

  • iOS dev
    iOS dev almost 2 years

    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.

  • Raj
    Raj almost 10 years
    @sheetal try to load from app delegate didFinishLoad , its work perfectly for me
  • user2260054
    user2260054 almost 9 years
    Super helpful answer!
  • imjaydeep
    imjaydeep almost 6 years
    where do i call save cookies?