1

I am having two view controllers on first controller having button , on click of which a local notification triggered, but I want to open second view controller on click of local notification. Has gone through all the related post but couldn't get the solution.

My code is : In First view controller view did Load:

 isGrantedNotificationAccess = false;
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    UNAuthorizationOptions options =  UNAuthorizationOptionSound + UNAuthorizationOptionAlert;
    [center requestAuthorizationWithOptions:options completionHandler:^(BOOL granted, NSError * _Nullable error) {
        isGrantedNotificationAccess = granted;
    }];

On button action in first view controller only:

 - (IBAction)buttonAction:(id)sender {
    if (isGrantedNotificationAccess) {
        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
        UNMutableNotificationContent *muContent = [[UNMutableNotificationContent alloc] init];
        muContent.title = @"Keshav Title";
        muContent.subtitle = @"He is an iOS Developer";
        muContent.body = @"He is a body";
        muContent.sound = [UNNotificationSound defaultSound];
        UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:3 repeats:NO];
        UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"UYLocalNotification" content:muContent               trigger: trigger];

        [center addNotificationRequest:request withCompletionHandler:nil];
    }
} 

In appdelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    center.delegate  = self;
    return  YES;
}


-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler
{
    UNNotificationPresentationOptions present = UNNotificationPresentationOptionAlert + UNNotificationPresentationOptionSound ;
    completionHandler(present);
}

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{

    if(application.applicationState == UIApplicationStateActive) {
        //app is currently active, can update badges count here
    } else if(application.applicationState == UIApplicationStateBackground){
        //app is in background, if content-available key of your notification is set to 1, poll to your backend to retrieve data and update your interface here
        self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
        UIViewController *viewController =  [storyboard instantiateViewControllerWithIdentifier:@"secondViewController"];
        self.window.rootViewController = viewController;
        [self.window makeKeyAndVisible];
    } else if(application.applicationState == UIApplicationStateInactive){
        //app is transitioning from background to foreground (user taps notification), do what you need when user taps here
    }
}
K.K
  • 79
  • 2
  • 8

1 Answers1

0

In AppDelegate

- (void)userNotificationCenter:(UNUserNotificationCenter *)center
       didReceiveNotificationResponse:(UNNotificationResponse *)response
       withCompletionHandler:(void (^)(void))completionHandler {



      UINavigationController *nvc = (UINavigationController *)self.window.rootViewController;

      // Currently visible ViewController
      UIViewController *vc = nvc.visibleViewController;

      UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main"
                                             bundle:NULL];
      // YourViewController to Push in Your case SecondViewController
      yourViewController *myVc= [sb instantiateViewControllerWithIdentifier:@"yourViewController"];

      [navigationController pushViewController:myVc animated:true];
}

You can check Particular notification by response.actionIdentifier

in Your case with response.notification.request.content.categoryIdentifier You check particular Notification

To set catagoryIdentifier

muContent.categoryIdentifier = @"Your_Identifier";
vp2698
  • 1,783
  • 26
  • 28
  • UILocalNotification is deprecated. – K.K Mar 26 '18 at 11:08
  • Thank you, It works for me. If I have multiple view controllers and multiple local notifications and I want to open different controllers on click of different notifications. How can I achieve that? – K.K Mar 26 '18 at 11:26
  • Thank you, achieved the same.@vp2699 – K.K Mar 26 '18 at 13:35