How to schedule a local notification in iOS 10 (objective-c)

Developer picture Developer · Oct 9, 2016 · Viewed 26.6k times · Source

I'd like to schedule local notifications using iOS 10. I'd like to know how to do this. I've looked all around the web, but I keep finding clues only for registering and handeling the notifications. Not for the scheduling of a local notification.

So, does anyone know how to do this?

Answer

Jamshed Alam picture Jamshed Alam · Oct 9, 2016
  1. Try it. Its deprecated but working code. Use it for Before iOS 10.0 :

    //Get all previous noti..
     NSLog(@"scheduled notifications: --%@----", [[UIApplication sharedApplication] scheduledLocalNotifications]);
    
     NSDate *now = [NSDate date];
     now = [now dateByAddingTimeInterval:60*60*24*7]; //7 for 7th day of the week.
     NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    
    [calendar setTimeZone:[NSTimeZone localTimeZone]];
     NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit|NSTimeZoneCalendarUnit fromDate:now];
    
    
     NSDate *SetAlarmAt = [calendar dateFromComponents:components];
    
    
     UILocalNotification *localNotification = [[UILocalNotification alloc] init];
    
     localNotification.fireDate = SetAlarmAt;
    
    
     NSLog(@"FIRE DATE --%@----",[SetAlarmAt description]);
    
     localNotification.alertBody =@"Alert";
    
     localNotification.alertAction = [NSString stringWithFormat:@"My test for Weekly alarm"];
    
     localNotification.userInfo = @{
                               @"alarmID":[NSString stringWithFormat:@"123"],
                               @"SOUND_TYPE":[NSString stringWithFormat:@"hello.mp3"]
                               };
    
      localNotification.repeatInterval=0; //[NSCalendar currentCalendar];
    
    
      [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
    
    1. For iOS 10.0 and later: Now try with UserNotifications framework: Add the framework, and import like #import . In Appdelegate Didfinishluanch method.

      UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
          [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert)
                    completionHandler:^(BOOL granted, NSError * _Nullable error) {
                        if (!error) {
                            NSLog(@"request succeeded!");
                            [self testAlrt];
                        }
                    }];
      

In your ibaction or method, write it and test:

 NSDate *now = [NSDate date];

// NSLog(@"NSDate--before:%@",now);

now = [now dateByAddingTimeInterval:60*60*24*7];

NSLog(@"NSDate:%@",now);

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

[calendar setTimeZone:[NSTimeZone localTimeZone]];

NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit|NSTimeZoneCalendarUnit fromDate:now];

NSDate *todaySehri = [calendar dateFromComponents:components]; //unused



UNMutableNotificationContent *objNotificationContent = [[UNMutableNotificationContent alloc] init];
objNotificationContent.title = [NSString localizedUserNotificationStringForKey:@"Notification!" arguments:nil];
objNotificationContent.body = [NSString localizedUserNotificationStringForKey:@"This is local notification message!"
                                                                    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:@"ten"
                                                                      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");
    }
}];