How to cancel local notification in iphone

I am making an application that needs to set a notification, fortunately, I could not set a local notification, but I do not know how to remove the notification set by this application (my aplomatik). xcode does provide delete with removeAllNotifications functionality, but you cannot delete selected notifications set by the application

+6
iphone
source share
3 answers

You can call [[UIApplication sharedApplication] cancelLocalNotification:notification] to cancel the notification. Since local notifications comply with the NSCoding protocol, they can be saved and retrieved for later cancellation.

+18
source share

I know this post is old, but hope this solution helps someone

 NSArray *notificationArray = [[UIApplication sharedApplication] scheduledLocalNotifications]; for(UILocalNotification *notification in notificationArray){ if ([notification.alertBody isEqualToString:@"your alert body"] && (notification.fireDate == your alert date time)) { // delete this notification [[UIApplication sharedApplication] cancelLocalNotification:notification] ; } } 

I compare the warning body and the date to make sure that I delete the correct notification, as it is likely that two or more notifications may have the same body or time.

+10
source share

Local notification in iOS 10 and below iOS 10 with Xcode 8 beta 2

pragma sign - Calculate before date

 -(void) calculateBeforedays:(int)_day hours:(int)_hours minutes:(int) _minutes { //_fir:(int)_firecount //Get Predefined Future date NSString *dateString = [NSString stringWithFormat:@"%@T%@:00.000Z",_eventdate,_eventtime]; NSLog(@"dateString %@",dateString); // NSLog(@"_firecount %d",_firecount); // //Get Predefined Future date // NSString *dateString = [NSString stringWithFormat:@"2016-12-31T12:%d:00.000Z",_firecount]; // NSLog(@"dateString %@",dateString); NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"]; NSDate *marrigeDate = [dateFormatter dateFromString:dateString]; // Set reminder date before marrige date int setDay = _day; int setHours = _hours; int setMins = _minutes; float milliseconds = (setDay * 24 * 60 * 60 ) + (setHours * 60 * 60 ) + (setMins * 60 ); NSDate *someDateInUTC = [NSDate date]; NSTimeInterval timeZoneSeconds = [[NSTimeZone localTimeZone] secondsFromGMT]; NSDate *dateInLocalTimezone = [someDateInUTC dateByAddingTimeInterval:timeZoneSeconds]; //Get Current date NSDate *currentDate = dateInLocalTimezone; NSTimeInterval marigeTimeInterval = [marrigeDate timeIntervalSinceDate:currentDate]; //Get difference between time NSTimeInterval timeIntervalCountDown = marigeTimeInterval - milliseconds; //Set perticulater timer NSDate *timerDate = [NSDate dateWithTimeIntervalSinceNow:timeIntervalCountDown]; [self triggerNotification:timerDate]; } #pragma mark- Trigger Reminders - (void)triggerNotification:(NSDate *) reminderDate { if([[[UIDevice currentDevice] systemVersion] floatValue] > 10.0f){ // create actions #if XCODE_VERSION_GREATER_THAN_OR_EQUAL_TO_8 UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; // create actions UNNotificationAction *acceptAction = [UNNotificationAction actionWithIdentifier:@"com.inviteapp.yes" title:@"Accept" options:UNNotificationActionOptionForeground]; UNNotificationAction *declineAction = [UNNotificationAction actionWithIdentifier:@"com.inviteapp.no" title:@"Decline" options:UNNotificationActionOptionDestructive]; UNNotificationAction *snoozeAction = [UNNotificationAction actionWithIdentifier:@"com.inviteapp.snooze" title:@"Snooze" options:UNNotificationActionOptionDestructive]; NSArray *notificationActions = @[ acceptAction, declineAction, snoozeAction ]; // create a category UNNotificationCategory *inviteCategory = [UNNotificationCategory categoryWithIdentifier:CYLInviteCategoryIdentifier actions:notificationActions intentIdentifiers:@[] options:UNNotificationCategoryOptionCustomDismissAction]; NSSet *categories = [NSSet setWithObject:inviteCategory]; // registration [center setNotificationCategories:categories]; #endif } else if([[[UIDevice currentDevice] systemVersion] floatValue] > 8.0f){ // create actions UIMutableUserNotificationAction *acceptAction = [[UIMutableUserNotificationAction alloc] init]; acceptAction.identifier = @"com.inviteapp.yes"; acceptAction.title = @"Accept"; acceptAction.activationMode = UIUserNotificationActivationModeBackground; acceptAction.destructive = NO; acceptAction.authenticationRequired = NO; //If YES requies passcode, but does not unlock the device UIMutableUserNotificationAction *declineAction = [[UIMutableUserNotificationAction alloc] init]; declineAction.identifier = @"com.inviteapp.no"; acceptAction.title = @"Decline"; acceptAction.activationMode = UIUserNotificationActivationModeBackground; declineAction.destructive = YES; acceptAction.authenticationRequired = NO; UIMutableUserNotificationAction *snoozeAction = [[UIMutableUserNotificationAction alloc] init]; snoozeAction.identifier = @"com.inviteapp.snooze"; acceptAction.title = @"Snooze"; snoozeAction.activationMode = UIUserNotificationActivationModeBackground; snoozeAction.destructive = YES; snoozeAction.authenticationRequired = NO; // create a category UIMutableUserNotificationCategory *inviteCategory = [[UIMutableUserNotificationCategory alloc] init]; inviteCategory.identifier = CYLInviteCategoryIdentifier; NSArray *notificationActions = @[ acceptAction, declineAction, snoozeAction ]; [inviteCategory setActions:notificationActions forContext:UIUserNotificationActionContextDefault]; [inviteCategory setActions:notificationActions forContext:UIUserNotificationActionContextMinimal]; // registration NSSet *categories = [NSSet setWithObject:inviteCategory]; UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert; UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types categories:categories]; [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; } /// 2. request authorization for localNotification [self registerNotificationSettingsCompletionHandler:^(BOOL granted, NSError * _Nullable error) { if (!error) { NSLog(@"request authorization succeeded!"); } }]; if([[[UIDevice currentDevice] systemVersion] floatValue] > 10.0f){ #if XCODE_VERSION_GREATER_THAN_OR_EQUAL_TO_8 [self localNotificationForiOS10:reminderDate]; #endif } else { [self localNotificationBelowiOS10: reminderDate]; } } - (void)registerNotificationSettingsCompletionHandler:(void (^)(BOOL granted, NSError *__nullable error))completionHandler; { /// 2. request authorization for localNotification if([[[UIDevice currentDevice] systemVersion] floatValue] > 10.0f){ #if XCODE_VERSION_GREATER_THAN_OR_EQUAL_TO_8 UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:completionHandler]; #endif } else if([[[UIDevice currentDevice] systemVersion] floatValue] > 8.0f){ UIUserNotificationSettings *userNotificationSettings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge) categories:nil]; UIApplication *application = [UIApplication sharedApplication]; [application registerUserNotificationSettings:userNotificationSettings]; } } 

to set multiple notifications: iOS 10, add another requestWithIdentifier

pragma brand - Localization on more than iOS 10

 -(void) localNotificationForiOS10:(NSDate *) _reminderDate{ _eventReminderDate = _reminderDate; NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; [calendar setTimeZone:[NSTimeZone localTimeZone]]; NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond|NSCalendarUnitTimeZone fromDate:_reminderDate]; NSLog(@"NSDateComponents %@",components); UNMutableNotificationContent *objNotificationContent = [[UNMutableNotificationContent alloc] init]; objNotificationContent.title = [NSString localizedUserNotificationStringForKey:_eventname arguments:nil]; objNotificationContent.body = [NSString localizedUserNotificationStringForKey:@"You have event reminder" arguments:nil]; objNotificationContent.sound = [UNNotificationSound defaultSound]; /// 4. update application icon badge number objNotificationContent.badge = @([[UIApplication sharedApplication] applicationIconBadgeNumber] + 1); UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components repeats:NO]; UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"eventdate" content:objNotificationContent trigger:trigger]; /// 3. schedule localNotification UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; [center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) { if (!error) { NSLog(@"Local Notification succeeded"); } else { NSLog(@"Local Notification failed"); } }]; } 

to set multiple notifications below iOS 10, add different userinfo

pragma sign - Localization on less than iOS 10

 -(void) localNotificationBelowiOS10:(NSDate *) _reminderDate{ _eventReminderDate = _reminderDate; NSLog(@"dateInLocalTimezone %@",_eventReminderDate); /// 3. schedule localNotification UILocalNotification *localNotification = [[UILocalNotification alloc] init]; localNotification.fireDate = _eventReminderDate ; localNotification.alertTitle = _eventname; localNotification.alertBody = @"You have Event Name"; localNotification.timeZone = [NSTimeZone defaultTimeZone]; localNotification.repeatInterval = 0; localNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + 1; NSDictionary *info = [NSDictionary dictionaryWithObject:_eventname forKey:_eventname]; localNotification.userInfo = info; NSLog(@"info ---- %@",info); NSLog(@"notification userInfo gets name : %@",[info objectForKey:_eventname]); [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; } 

pragma-tag- Delete local Perticulater notification

 -(IBAction)deleteReminder:(id)sender{ UIButton *senderButton = (UIButton *)sender; _selectedRow = senderButton.tag; NSIndexPath *indexPath=[NSIndexPath indexPathForRow:senderButton.tag inSection:0]; // if section is 0 ReminderCell * cell = (ReminderCell*)[_tableView cellForRowAtIndexPath:indexPath]; _eventname = [[_eventArray objectAtIndex:indexPath.row] objectForKey:@"event_name"]; _eventdate = [[_eventArray objectAtIndex:indexPath.row] objectForKey:@"event_date"]; _eventtime = [[_eventArray objectAtIndex:indexPath.row] objectForKey:@"event_st"]; if([[[UIDevice currentDevice] systemVersion] floatValue] > 10.0f){ #if XCODE_VERSION_GREATER_THAN_OR_EQUAL_TO_8 UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; // remove all local notification: [center removePendingNotificationRequestsWithIdentifiers:@[_eventname]]; #endif } else { NSLog(@"Delete notification below ios 10"); UIApplication *app = [UIApplication sharedApplication]; NSArray *eventArray = [app scheduledLocalNotifications]; for (int i=0; i<[eventArray count]; i++) { UILocalNotification* oneEvent = [eventArray objectAtIndex:i]; NSDictionary *userInfoCurrent = oneEvent.userInfo; NSString *ename=[NSString stringWithFormat:@"%@",[userInfoCurrent valueForKey:_eventname]]; if ([ename isEqualToString:_eventname]) { //Cancelling local notification [app cancelLocalNotification:oneEvent]; break; } } } } 
0
source share

All Articles