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

时间:2016-10-07 00:41:19

标签: ios swift notifications uilocalnotification uiapplication

我不确定这是不可能的,还是我执行错误。

我正在尝试使用beginBackgroundTaskexpirationHandler)在后台完成任务,然后在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)  

1 个答案:

答案 0 :(得分:0)

最好的我可以说,问题是由于presentLocalNotificationNow是异步并立即返回所以没有足够的时间让系统注册通知。我通过提前安排通知解决了这个问题,因此有足够的时间。