使用相同的请求标识符同时注册 2 个本地通知不被覆盖

Posted

技术标签:

【中文标题】使用相同的请求标识符同时注册 2 个本地通知不被覆盖【英文标题】:Registering 2 local notification simultaneously with same request identifier not overwriting 【发布时间】:2018-08-22 12:26:24 【问题描述】:

我正在创建一个带有本地通知的提醒,我必须在其中注册一个带有某个标识符的本地通知,比如说 X,它应该在定义的时间间隔内触发而不重复,同时我想注册相同的通知10 分钟后具有相同标识符的第一个被解雇。

在我的情况下,如果第一个通知被触发并且用户没有对其采取任何操作,那么在 10 分钟后如果同样的通知被触发,那么在通知中心(托盘)中不应该有 2 个通知。相反,应该只有最后一个通知。

以下是我为完成此任务所做的代码:

    notificationContent.categoryIdentifier = Notification.Category.tutorial


    let notificationTrigger1 = UNTimeIntervalNotificationTrigger(timeInterval: 10, repeats: false)

    let request1 = UNNotificationRequest(identifier: "FiveSecond", content: notificationContent, trigger: notificationTrigger1)

    center.add(request1, withCompletionHandler: (_ error: Error?) -> Void in
        if error == nil 
            print("add NotificationRequest1 succeeded!")
            center.removePendingNotificationRequests(withIdentifiers: [Notification.Category.tutorial])
        
    )


    let notificationTrigger2 = UNTimeIntervalNotificationTrigger(timeInterval: 60*10, repeats: true)

    let request2 = UNNotificationRequest(identifier: "FiveSecond", content: notificationContent, trigger: notificationTrigger2)

    center.add(request2, withCompletionHandler: (_ error: Error?) -> Void in
        if error == nil 
            print("add NotificationRequest2 succeeded!")
            center.removePendingNotificationRequests(withIdentifiers: [Notification.Category.tutorial])
        
    )

在这段代码中,问题是第一个通知没有被触发,只有第二个通知在 10 分钟后被触发。

【问题讨论】:

你在主线程吗? 是的,我在主线程中。 【参考方案1】:

您要删除两次之前安排的通知:

if error == nil 
    print("add NotificationRequest2 succeeded!")
    //remove previous notifications
    center.removePendingNotificationRequests(withIdentifiers: [Notification.Category.tutorial]) 

您应该在应用程序空闲时提前设置两个通知,假设用户不会做出反应 - 这是您设置这两个通知的唯一机会。

在用户采取行动时删除第二个通知是在处理该操作的代码中删除不需要的通知,或者在应用激活时处理该逻辑。

【讨论】:

好的 - 但是如果我不删除它,如果第一个没有执行任何操作并且应用程序处于空闲状态,我将在中心收到 2 个通知。 当第二个被解雇时,我只希望在中心发出最后一个通知。当第二个被触发时,第一个应该被自动删除。

以上是关于使用相同的请求标识符同时注册 2 个本地通知不被覆盖的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 10 中安排和处理本地通知

本地通知标识符

iBeacon 每 1 分钟不断进出区域

Swift 3 本地通知未触发

从后台注册本地通知

如何注册 iOS 设备以接收推送通知?