Search code examples
ios10uilocalnotificationappdelegate

Tap Local Notifications isn't triggered


In iOS 10.3 I'm adding the code, to the AppDelegate:

@interface AppDelegate () {
    UNUserNotificationCenter *center;
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    center = [UNUserNotificationCenter currentNotificationCenter];
    UNAuthorizationOptions options = UNAuthorizationOptionAlert + UNAuthorizationOptionSound;
    [center requestAuthorizationWithOptions:options
                          completionHandler:^(BOOL granted, NSError * _Nullable error) {
                              if (!granted) {
                                  DLog(@"Something went wrong");
                              } else {
                                  DLog(@"Access Granted")
                              }
                          }];

    return YES;
}

I tap the notification but the method bellow isn't called.

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification

Solution

  • For Register for notification import UserNotifications/UserNotifications.h framework in AppDelegate and use Notification Delegate UNUserNotificationCenterDelegate to respond to notifications when notifications receive.

    @interface AppDelegate ()<UNUserNotificationCenterDelegate>
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
    
        //Notification Setup.
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) {
            UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
            center.delegate = self;
            [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
                if( !error ){
                    [[UIApplication sharedApplication] registerForRemoteNotifications];
                }
            }];
        } else {
    
            //register to receive notifications
            UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound) categories:nil];
            [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
    
        }
    
    
        return YES;
    }
    
    #ifdef __IPHONE_10_0
    ////####    iOS 10    #########//
    //This is call when application is open.
    - (void)userNotificationCenter:(UNUserNotificationCenter *)center
           willPresentNotification:(UNNotification *)notification
             withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler
    {
        NSLog(@"Userinfo %@",notification.request.content.userInfo);
    }
    
    
    //This is call when application is in background.
    - (void)userNotificationCenter:(UNUserNotificationCenter *)center
    didReceiveNotificationResponse:(UNNotificationResponse *)response
             withCompletionHandler:(void(^)())completionHandler
    {
        NSLog(@"Userinfo %@",response.notification.request.content.userInfo);
    
        // Must be called when finished
        completionHandler();
    }
    #endif
    ////####    iOS 10  End   #########//