IOS 10+每隔指定日期重复通知

Posted

技术标签:

【中文标题】IOS 10+每隔指定日期重复通知【英文标题】:IOS 10+ repeat notification every specified Date 【发布时间】:2017-06-28 14:31:50 【问题描述】:

我正在尝试在每年的每个指定日期安排一次通知 例如每 1/6/yyyy 和 15/6/yyyy 我已经完成了这段代码,但它不起作用

    var dateComponents = DateComponents()
        dateComponents.hour = 07
        dateComponents.minute = 24
        dateComponents.month=06;
        dateComponents.day=28;



        let trigger = UNCalendarNotificationTrigger.init(dateMatching: dateComponents, repeats:true)
        let request     = UNNotificationRequest.init(identifier: UUID().uuidString, content: content, trigger: trigger)


        let center = UNUserNotificationCenter.current()
        center.add(request)

【问题讨论】:

什么不起作用?通知是否添加到通知中心,但您从未收到?还是没有按预期的时间间隔重复? 它根本不起作用通知没有触发 您的通知请求中肯定缺少通知内容和类别。如果您没有请求访问通知并且没有设置通知类别,您也需要这样做。看我的回答。 【参考方案1】:

您还需要添加通知内容,否则您的通知将不会被添加。您还需要将指定的通知类别添加到通知中心的类别中。

如果您设置了通知中心请求并且用户批准了请求,您可以使用以下代码在特定日期发送通知。

var dateComponents = DateComponents()
dateComponents.hour = 07
dateComponents.minute = 24
dateComponents.month=06;
dateComponents.day=28;
dateComponents.timeZone = TimeZone.current
let yourFireDate = Calendar.current.date(from: dateComponents)
let content = UNMutableNotificationContent()
content.title = NSString.localizedUserNotificationString(forKey:
            "Your notification title", arguments: nil)
content.body = NSString.localizedUserNotificationString(forKey: "Your notification body", arguments: nil)
content.categoryIdentifier = "Your notification category"
content.sound = UNNotificationSound.default()
content.badge = 1

let dateComponents = Calendar.current.dateComponents(Set(arrayLiteral: Calendar.Component.month, Calendar.Component.day, Calendar.Component.hour,Calendar.Component.minute), from: yourFireDate)
let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: false)
let request = UNNotificationRequest(identifier: "Your notification identifier", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request, withCompletionHandler:  error in
        if let error = error 
            //handle error
         else 
            //notification set up successfully
        

【讨论】:

我已经尝试了您的代码,并且我已经检查了通知已设置但未触发的 if 语句。 (当然,我在 1 分钟后更改了日期和时间的小时、分钟、日期) 如果您使用简单的UNTimeIntervalNotificationTrigger,您会收到通知吗?如果您检查它并且它有效,我们可以确保问题来自触发器,而不是来自您设置的其他地方。此外,在 UNUserNotificationCenter.current().add(request... 的 else 条件下,您应该调用 trigger.nextrTriggerDate() 以查看何时应发送通知。 我注意到一个奇怪的事情,我已经将小时设置为 05,分钟设置为 55,在 else 块中我打印了 tigger.nextTriggerDate 并且已经打印了,它增加了 7 小时小时部分它返回可选(2018-06-29 12:55:00 +0000) 这个问题很可能是由时区差异引起的。如果您不指定时区,则默认为 GMT。请参阅我的更新答案。 同样的问题我设置了小时 6 分钟 25 打印 nextTriggerDate 的结果是:可选(2017-06-29 13:25:00 +0000)

以上是关于IOS 10+每隔指定日期重复通知的主要内容,如果未能解决你的问题,请参考以下文章

针对特定日期重复本地通知 iOS 10

在特定时间重复本地通知,并在同一时间后每隔一段时间重复一次本地通知

iOS 10 - 每“x”分钟重复一次通知

获取即将到来的指定日期的日期

如何在 Unity(C#,目前针对 iOS)中设置每周重复推送通知?

ios重复本地通知