处于非活动应用程序状态时的本地通知

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 异步并立即返回,因此系统没有足够的时间来注册通知。我通过提前安排通知来解决问题,所以有足够的时间。