title: When my app is in background, push notifications are handled only if I touch the top notification banner and not working while I click app icon
body: <p>I've implemented <code>application:didReceiveRemoteNotification:</code> to store data in my app when a push notification is received.<br>
  However when my app is in background and I receive a notification, the data is stored only if I touch the notification banner appearing on top:</p>
  
  <p>Instead, if I touch the app icon to reopen it, the content of the notification is not stored:</p>
  
  <p><code>application:didReceiveRemoteNotification:</code> is invoked only when I push the notification banner on top.</p>
  
  <p>I've used <code>applicationWillEnterForeground</code> and <code>didFinishLaunchingWithOptions</code> methods and while clicking the app icon and debugging its entering <code>applicationWillEnterForeground</code> and control goes nowhere. Here is the code for <code>didFinishLaunchingWithOptions</code> and <code>applicationWillEnterForeground</code> and <code>didReceiveRemoteNotification</code>.</p>
  
  <pre><code>- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
      // Override point for customization after application launch.
      self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
      self.window.rootViewController = self.viewController;
      [self.window makeKeyAndVisible];
      self.isForeground = YES;
  
      // Let the device know we want to receive push notifications
      [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
      storage= [[NSMutableArray alloc]init];
      if (launchOptions != nil) {
          // launched from notification item click
          NSDictionary *userInfo = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
          if (userInfo != nil) [self HandleNotification:userInfo];
      }
      return YES;
  }
  
  - (void)applicationWillEnterForeground:(UIApplication *)application {
      // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
      isForeground = YES;
      NSArray *subviews = [window subviews];
      for (int i = 0; i &lt; [subviews count]; i++) {
          [[subviews objectAtIndex:i] removeFromSuperview];
      }
      //[self.window addSubview:tabBarController.view];
      [self.window makeKeyAndVisible];
      self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
      self.window.rootViewController = self.viewController; 
  }
  
  - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
      [self HandleNotification:userInfo]; 
  }
  
  - (void)HandleNotification:(NSDictionary *)userInfo {
      ApiWrapper *wrapper = [[ApiWrapper alloc] init];
      NSString *dteStr = [[NSString alloc] init];
      NSDate *nowdate = [NSDate date];
      NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
      //[dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"Europe/London"]];
      [dateFormat setDateFormat:@"dd/MM/yyyy HH:mm:ss"];
      dteStr = [dateFormat stringFromDate:nowdate];
      [dateFormat release];
  
      NSString *notifId = [userInfo objectForKey:@"NotificationId"];
      NSData *test = self.strTest;
      NSString *strToken = [NSString stringWithFormat:@"%@", test];
      strToken = [strToken substringWithRange:NSMakeRange(1, [strToken length] - 2)];     
  
      [wrapper deviceResponse:notifId:dteStr:strToken];
  
      NSLog(@".....user info%@", userInfo);
      NSDictionary *pushInfo = [userInfo  objectForKey:@"aps"];
      NSString *alertstring = [pushInfo objectForKey:@"alert"];
      NSLog(@"Alertstring: %@", alertstring);
  
      [UIApplication sharedApplication].applicationIconBadgeNumber = [[[userInfo objectForKey:@"aps"] objectForKey: @"badgecount"] intValue];
  
      MLNotifMessage *objNotif = [[MLNotifMessage alloc] init];
      objNotif.notifText = alertstring;    
      NSDate *nowdate1 = [NSDate date];
      NSDateFormatter *dateFormat1 = [[NSDateFormatter alloc] init];
      //[dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"Europe/London"]];
      [dateFormat1 setDateFormat:@"dd/MM/yyyy HH:mm:ss"];
      objNotif.datenow = [dateFormat1 stringFromDate:nowdate1];
      [dateFormat1 release];
  
      NSLog(@"Date in delegate class is %@", objNotif.datenow);
      [storage addObject:objNotif];    
  
      if (self.isForeground) {
          NSArray *subviews = [window subviews];
          for (int i = 0; i &lt; [subviews count]; i++) {
              [[subviews objectAtIndex:i] removeFromSuperview];
          }
          [self.window makeKeyAndVisible];
          self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
          self.window.rootViewController = self.viewController;
      }
  }
  </code></pre>