2016-07-14 32 views
6

UILocalNotification hat abgeschrieben worden, so würde Ich mag meinen Code an den UserNotification Rahmen aktualisieren:UserNotification in 3 Tagen dann jeden Tag/Stunde wiederholen - iOS 10

let alertDays = 3.0 
let alertSeconds = alertDays * 24.0 * 60.0 * 60.0 

let localNotification:UILocalNotification = UILocalNotification() 

localNotification.alertAction = "Reminder" 
localNotification.alertTitle = "Reminder Title" 
localNotification.alertBody = "Reminder Message" 
localNotification.fireDate = Foundation.Date(timeIntervalSinceNow: alertSeconds) 
localNotification.repeatInterval = .day    
UIApplication.shared().scheduleLocalNotification(localNotification) 

Wie kann ich eine ähnliche tägliche oder stündliche Wiederholung eingestellt mit dem UserNotification Framework nach dem Warten auf die erste Benachrichtigung?

let alertDays = 3.0 
let alertSeconds = alertDays * 24.0 * 60.0 * 60.0 

let content: UNMutableNotificationContent = UNMutableNotificationContent() 

content.title = "Reminder Title" 
content.subtitle = "Reminder Subtitle" 
content.body = "Reminder Message" 

let calendar = Calendar.current 

let alarmTime = Foundation.Date(timeIntervalSinceNow: alertSeconds) 
let alarmTimeComponents = calendar.components([.day, .hour, .minute], from: alarmTime) 

let trigger = UNCalendarNotificationTrigger(dateMatching: alarmTimeComponents, repeats: true) 

let request = UNNotificationRequest(identifier: workoutAlarmIdentifier, 
             content: content, 
             trigger: trigger) 

UNUserNotificationCenter.current().add(request) 
    { 
     (error) in // ... 
    } 
+0

Verwandte? [Wie setze ich ein NSCalendarUnitMinute repeatInterval auf iOS 10 UserNotifications?] (Http://Stackoverflow.com/q/37804287/2415822) – JAL

+0

RelatedInterval scheint aber nicht .repeatInterval von den abgeschriebenen UILocalNotifications, die in UserNotifications unterstützt wird. Ich suche, wie dies im neuen Framework gehandhabt wird, damit ich meinen Code von dem abgeschriebenen Code verschieben kann. –

+0

Ich schlage vor, Sie erheben ein Radar – Wain

Antwort

2

es so scheint, wird nicht unterstützt, aber eine Abhilfe machen Sie nutzen könnten:

let alertDays = 3.0 
let daySeconds = 86400 
let alertSeconds = alertDays * daySeconds 

let content: UNMutableNotificationContent = UNMutableNotificationContent() 

content.title = "Reminder Title" 
content.subtitle = "Reminder Subtitle" 
content.body = "Reminder Message" 

let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: (alertSeconds), repeats: false) 

let request = UNNotificationRequest(identifier: workoutAlarmIdentifier, 
            content: content, 
            trigger: trigger) 

UNUserNotificationCenter.current().add(request) 
{ 
    (error) in // ... 
} 

in Kombination mit didReceive(_:withContentHandler:) Sie verwenden:

let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: (daySeconds), repeats: false) 

Ich kenne diese isn 't optimal, aber es sollte funktionieren, ohne veraltete Klassen/Methoden zu verwenden. Sie verwenden repeats: false, da Sie die Benachrichtigung abfangen, bevor der Benutzer sie empfängt und eine neue Benachrichtigung erstellt. Zusätzlich können Sie es in Kombination mit UNNotificationAction und UNNotificationCategory verwenden, wenn Sie mehrere Benachrichtigungen bearbeiten.

+1

Warten Sie eine Minute ... Die Frage war nach lokalen Benachrichtigungen, nicht Remote-Benachrichtigungen, wofür die Erweiterungen des Benachrichtigungsdienstes sind. Sie können sie nicht für lokal geplante 'UNNotification's verwenden, richtig? – CMash

+0

In der Tat sieht es so aus, als müssten Sie "mutable-content" in einer Remote-Benachrichtigung einstellen, damit sie von der Service-Erweiterung behandelt wird, so dass nicht alle Benachrichtigungen durchlaufen werden. – CMash

0

sollte diese Arbeit:

func addNotificationForAlarm(alarm: MyAlarm) { 

    let myAlarmNotifContent = UNMutableNotificationContent() 
    myAlarmNotifContent.title = "Reminder" 
    myAlarmNotifContent.body = alarm.activity 
    myAlarmNotifContent.sound = UNNotificationSound.default() 

    if alarm.repeatDays.count == 1 { 

    } else { 

     for index in 1...alarm.repeatDays.count { 
      createNotif(date: alarm.date, weekDay: index, content: myAlarmNotifContent) 
     } 
    } 

} 

private func createNotif(date: Date, weekDay: Int, content: UNNotificationContent) { 

    var dateComponent = DateComponents() 
    dateComponent.weekday = weekDay 
    dateComponent.hour = Calendar.current.dateComponents([.hour], from: date).hashValue 
    dateComponent.minute = Calendar.current.dateComponents([.minute], from: date).hashValue 

    let myAlarmTrigger = UNCalendarNotificationTrigger(dateMatching: dateComponent, repeats: true) 

    setupNotificationSettings() 

    let identifier = "Your-Notification" 
    let request = UNNotificationRequest(identifier: identifier, content: content, trigger: myAlarmTrigger) 
    let center = UNUserNotificationCenter.current() 
    center.add(request, withCompletionHandler: { (error) in 
     if error != nil { 
      //TODO: Handle the error 
     } 
    }) 
}