我不确定这是不可能的,还是我执行错误。
我正在尝试使用beginBackgroundTask
(expirationHandler
)在后台完成任务,然后在LocalNotification
完成后发布iOS10
。问题是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)
答案 0 :(得分:0)
最好的我可以说,问题是由于presentLocalNotificationNow是异步并立即返回所以没有足够的时间让系统注册通知。我通过提前安排通知解决了这个问题,因此有足够的时间。