Search code examples
iosswift2uilocalnotification

Schedule Local Notifications at Specific times in the day


I want to setup a daily notification system for my app. It should notify the user twice a day, once at 8:00 AM (Hey there, your set of morning doses is ready. Wanna check it out?) and once at 7:00 PM (Ssup! Your evening Dose is waiting inside). I know that by doing this i'll run out of notifications in a month since there's a 64 notifications cap (for local notifications) but by then, the app will be live and i'll be done setting up remote notifications update.

I've looked at this question: How to schedule a same local notification in swift and the .Day is all good. I just need to know how to do it twice a day at those specified times;. Thanks in advance!

EDIT: how to set the specific time on the notification is part of the problem. The NSDate API is giving me funny time intervals (sinceNow/Since1973). I just want to set it to fire at 7 PM. :-/ Can't quite seem to do it with these NSDate apis unless I'm missing something.


Solution

  • func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        let settings = UIUserNotificationSettings(forTypes: .Badge, categories: nil)
        UIApplication.sharedApplication().registerUserNotificationSettings(settings)
    
        let localNotification1 = UILocalNotification()
        localNotification1.alertBody = "Your alert message 111"
        localNotification1.timeZone = NSTimeZone.defaultTimeZone()
        localNotification1.fireDate = self.getEightAMDate()
        UIApplication.sharedApplication().scheduleLocalNotification(localNotification1)
    
        let localNotification2 = UILocalNotification()
        localNotification2.alertBody = "Your alert message22"
        localNotification2.timeZone = NSTimeZone.defaultTimeZone()
        localNotification2.fireDate = self.getSevenPMDate()
        UIApplication.sharedApplication().scheduleLocalNotification(localNotification2)
        return true
    }
    
    func getEightAMDate() -> NSDate? {
        let calendar: NSCalendar! = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
        let now: NSDate! = NSDate()
    
        let date10h = calendar.dateBySettingHour(8, minute: 0, second: 0, ofDate: now, options: NSCalendarOptions.MatchFirst)!
        return date10h
    }
    
    func getSevenPMDate() -> NSDate? {
        let calendar: NSCalendar! = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
        let now: NSDate! = NSDate()
    
        let date19h = calendar.dateBySettingHour(19, minute: 0, second: 0, ofDate: now, options: NSCalendarOptions.MatchFirst)!
        return date19h
    }