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){
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];
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);
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){
Anil gupta
source share