UserNotification在3天后重复每天/每小时 - iOS 10

Gre*_*son 8 notifications date repeat swift ios10

UILocalNotification已被折旧,因此我想将我的代码更新为UserNotification框架:

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)
Run Code Online (Sandbox Code Playgroud)

在等待初始通知后,如何使用UserNotification框架设置类似的每日或每小时重复?

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 // ...
    }
Run Code Online (Sandbox Code Playgroud)

Gil*_* AB 2

似乎不支持此操作,但要解决此问题,您可以使用:

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 // ...
}
Run Code Online (Sandbox Code Playgroud)

didReceive(_:withContentHandler:)结合使用,您可以使用:

let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: (daySeconds), repeats: false)
Run Code Online (Sandbox Code Playgroud)

我知道这不是最佳的,但它应该可以在不使用已弃用的类/方法的情况下工作。您使用repeats: false,因为您是在用户收到通知之前拦截通知并创建新通知。此外,如果您处理多个通知,您可以将其与 UNNotificationAction 和 UNNotificationCategory 结合使用。

  • 等一下...问题是询问本地通知,而不是远程通知,这就是通知服务扩展的用途。您不能在本地安排的“UNNotification”上使用它们,对吧? (2认同)