web-dev-qa-db-fra.com

Répéter la notification locale quotidiennement à une heure précise avec swift

Je suis nouveau dans le développement iOS, mais j'ai créé l'application et j'essaie de créer une notification quotidienne pendant une durée déterminée. Actuellement, la notification est exécutée une fois pour la date/heure donnée. Je ne sais pas comment utiliser la méthode repeatInterval pour le planifier quotidiennement. Quelle est la meilleure méthode pour répéter la notification quotidiennement? toute aide serait très appréciée (Y).

    var dateComp:NSDateComponents = NSDateComponents()
    dateComp.year = 2015;
    dateComp.month = 06;
    dateComp.day = 03;
    dateComp.hour = 12;
    dateComp.minute = 55;
    dateComp.timeZone = NSTimeZone.systemTimeZone()

    var calender:NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
    var date:NSDate = calender.dateFromComponents(dateComp)!

    var notification:UILocalNotification = UILocalNotification()
    notification.category = "Daily Quote"
    notification.alertBody = quoteBook.randomQuote()
    notification.fireDate = date
    notification.repeatInterval = 

    UIApplication.sharedApplication().scheduleLocalNotification(notification)
12
JUSDEV

Vous devez fournir une valeur NSCalendarUnit telle que «HourCalendarUnit» ou «DayCalendarUnit» pour répéter une notification.

Ajoutez simplement ce code pour répéter quotidiennement la notification locale:

notification.repeatInterval = NSCalendarUnit.CalendarUnitDay
14
Vizllx

Donc, dû modifier légèrement le code ci-dessus du @ vizllx. Voici la nouvelle ligne:

notification.repeatInterval = NSCalendarUnit.Day 

Voici un exemple de travail complet que j'ai utilisé:

let notification = UILocalNotification()

  /* Time and timezone settings */
  notification.fireDate = NSDate(timeIntervalSinceNow: 8.0)
  notification.repeatInterval = NSCalendarUnit.Day
  notification.timeZone = NSCalendar.currentCalendar().timeZone
  notification.alertBody = "A new item is downloaded."

  /* Action settings */
  notification.hasAction = true
  notification.alertAction = "View"

  /* Badge settings */
  notification.applicationIconBadgeNumber =
  UIApplication.sharedApplication().applicationIconBadgeNumber + 1
  /* Additional information, user info */
  notification.userInfo = [
    "Key 1" : "Value 1",
    "Key 2" : "Value 2"
  ]

  /* Schedule the notification */
  UIApplication.sharedApplication().scheduleLocalNotification(notification)
}
13
Keith Holliday

var repeatInterval: NSCalendarUnit

=> la documentation indique "l'intervalle de calendrier auquel replanifier la notification".

alors: utilisez NSCalendarUnit.CalendarUnitDay

1
Daij-Djan

Les autres réponses montrent comment utiliser les anciennes notifications locales pré iOS 10. Avec iOS 10 et versions ultérieures, vous devez utiliser UNNotificationCenter comme suit:

    let content = UNMutableNotificationContent()
    content.title = "This will appear in bold, on it's own line."
    content.subtitle = "This will appear in bold, on it's own line, below the title."
    content.body = "This will appear as normal text, below the title and subtitle."

    let triggerInputForHourlyRepeat = Calendar.current.dateComponents([.minute], from: intendedFireDateVariable)
    let trigger = UNCalendarNotificationTrigger.init(dateMatching: triggerInput, repeats: true)

    let request = UNNotificationRequest(identifier: "someUniqueID", content: content, trigger: trigger)
    let unc = UNUserNotificationCenter.current()
    unc.add(request, withCompletionHandler: { (error) in
        /// Handle error
    })

Didacticiels utiles:

  1. https://www.techotopia.com/index.php/An_iOS_10_Local_Notification_Tutorial
  2. https://makeapppie.com/2016/11/21/manage-delete-and-update-notifications-in-ios-10/
0
Dave G