应用程序关闭时通知 willPresent 不会调用

Posted

技术标签:

【中文标题】应用程序关闭时通知 willPresent 不会调用【英文标题】:Notification willPresent won't calling when app is closed 【发布时间】:2019-03-02 19:10:32 【问题描述】:

我试图仅在工作日通知用户,并且不想使用 for 循环执行此操作,因此通知将 bool 重复为 true。当应用程序打开时,willPresent 函数可以工作,但是当应用程序进入后台时,willPresent 函数不会被应用程序调用并在周末向用户发送通知,这是我不想要的。

我已经在 didFinishLaunchingWithOptions 设置了UNUserNotificationCenter.current().delegate = self

这是我的 AppDelegate 中的 willPresent 函数:

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) 

        let date = Date()
        var dayOfWeek = date.getWeekDay()
        if dayOfWeek.rawValue == 1 || dayOfWeek.rawValue == 7
            print("Don't send a notification")
            completionHandler([])
        else
            completionHandler([.alert, .sound, .badge])
        
    

我正在使用的扩展:

extension Date 

    enum WeekDay: Int 
        case sunday = 1
        case monday
        case tuesday
        case wednesday
        case thursday
        case friday
        case saturday
    

    func getWeekDay() -> WeekDay 
        let calendar = Calendar.current
        let weekDay = calendar.component(Calendar.Component.weekday, from: self)
        return WeekDay(rawValue: weekDay)!
    

任何帮助将不胜感激。谢谢

【问题讨论】:

【参考方案1】:

那是因为你应该使用 didReceive 方法来接收后台通知

【讨论】:

以上是关于应用程序关闭时通知 willPresent 不会调用的主要内容,如果未能解决你的问题,请参考以下文章

UNUserNotificationCenter didReceive / willPresent未触发ios 11

管理推送通知

当应用程序被杀死/关闭时,世博会通知不会触发方法

缓存所有远程通知 - iOS

当应用程序在前台时,如何使远程通知出现在通知中心?

关闭应用程序时,Android 不会收到来自 Parse Push 的推送通知