根据应用程序的最后状态,当调用UNUserNotificationCenterDelegate的didReceive响应方法时,我尝试执行2个不同的任务。
如果该应用程序在前台运行,或者如果该应用程序已关闭但没有被杀死(我认为该状态是背景状态),那么我将执行一项任务,如果该应用程序被杀死(不活动),我将执行另一项任务。
问题是无论应用程序是否被杀死,applicationState都使我处于非活动状态。
func userNotificationCenter(_ center: UNUserNotificationCenter,didReceive response: UNNotificationResponse,withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
let application = UIApplication.shared
if application.applicationState == .active || application.applicationState == .background{
let typeInt: Int = userInfo["dataType"] as? Int ?? NotificationManager.DataType.reward.rawValue
let type = NotificationManager.DataType(rawValue: typeInt)!
NotificationManager.shared.handleNotification(for: type, userInfo: userInfo)
}else{
UserDefaults.standard.set(userInfo, forKey: "noti")
UserDefaults.standard.synchronize()
}
completionHandler()
}
我注意到的一件事是,如果我关闭应用程序而没有杀死它并重新打开它,则该应用程序将从原来的位置开始,但是当我关闭它并触摸通知时,该应用程序将运行启动屏幕。
我不知道我是否误解了applicationState,还是应该尝试其他方法。