处于非活动应用程序状态时的本地通知
Local Notification while in an inactive application state
我不确定这是不可能的,还是我执行的有误。
我正在尝试使用 beginBackgroundTask
(expirationHandler
) 在后台完成一项任务,然后在 [=14= 完成后 post 一个 LocalNotification
].问题是 Notification
不会持续触发 - 我可以设置 breakpoint
以使用 presentLocalNotificationNow
来查看它,但它并不总是向用户显示,并且仅在应用程序返回时显示到 foreground
(通过从主屏幕打开它)确实 didReceiveLocalNotification
被调用了。
如果我在安排通知时检查应用程序状态,它的 rawValue 值为 2,我认为它处于非活动状态,所以我假设这就是它没有向用户发送通知的原因。
我已尝试在任务完成后将 notification
安排 5 秒,然后立即调用 endBackgroundTask
,但通知仍未始终如一地显示给用户。 EndBackgroundTask
确实被调用了,我认为应该将应用程序从非活动状态移动到后台,此时 notification
应该显示,但我假设它不是立即发生的,并且在实际发生时由系统自行决定.
我做错了什么?
相关代码为:
let task = UIApplication.shared.beginBackgroundTask(expirationHandler: nil)
// Long running task
let notification = UILocalNotification()
notification.soundName = UILocalNotificationDefaultSoundName
notification.alertBody = "Message"
let settings = UIUserNotificationSettings(types: [.alert, .sound], categories: nil)
UIApplication.shared.registerUserNotificationSettings(settings)
UIApplication.shared.presentLocalNotificationNow(notification)
UIApplication.shared.endBackgroundTask(task)
据我所知,问题是由于 presentLocalNotificationNow 异步并立即返回,因此系统没有足够的时间来注册通知。我通过提前安排通知来解决问题,所以有足够的时间。
我不确定这是不可能的,还是我执行的有误。
我正在尝试使用 beginBackgroundTask
(expirationHandler
) 在后台完成一项任务,然后在 [=14= 完成后 post 一个 LocalNotification
].问题是 Notification
不会持续触发 - 我可以设置 breakpoint
以使用 presentLocalNotificationNow
来查看它,但它并不总是向用户显示,并且仅在应用程序返回时显示到 foreground
(通过从主屏幕打开它)确实 didReceiveLocalNotification
被调用了。
如果我在安排通知时检查应用程序状态,它的 rawValue 值为 2,我认为它处于非活动状态,所以我假设这就是它没有向用户发送通知的原因。
我已尝试在任务完成后将 notification
安排 5 秒,然后立即调用 endBackgroundTask
,但通知仍未始终如一地显示给用户。 EndBackgroundTask
确实被调用了,我认为应该将应用程序从非活动状态移动到后台,此时 notification
应该显示,但我假设它不是立即发生的,并且在实际发生时由系统自行决定.
我做错了什么?
相关代码为:
let task = UIApplication.shared.beginBackgroundTask(expirationHandler: nil)
// Long running task
let notification = UILocalNotification()
notification.soundName = UILocalNotificationDefaultSoundName
notification.alertBody = "Message"
let settings = UIUserNotificationSettings(types: [.alert, .sound], categories: nil)
UIApplication.shared.registerUserNotificationSettings(settings)
UIApplication.shared.presentLocalNotificationNow(notification)
UIApplication.shared.endBackgroundTask(task)
据我所知,问题是由于 presentLocalNotificationNow 异步并立即返回,因此系统没有足够的时间来注册通知。我通过提前安排通知来解决问题,所以有足够的时间。