如何在iOS后台运行服务来接收本地通知?

我正在开发应用程序,其中有一个与服务器的MQTT连接,服务器正在发送一些与设备和用户界面更改相关的值。 但是,当应用程序在后台用户应该得到本地通知,某些值被改变。 我知道后台服务不允许在iOS中,但我想确保这是没有办法做到这一点。

我通过UIApplication.shared.beginBackgroundTask在后台成功地添加了本地通知,但是只有在苹果终止应用之后,它才能正常工作3分钟。

  func registerBackgroundTask() { backgroundTask = UIApplication.shared.beginBackgroundTask { [weak self] in self?.endBackgroundTask() } assert(backgroundTask != UIBackgroundTaskInvalid) } func endBackgroundTask() { print("Background task ended.") UIApplication.shared.endBackgroundTask(backgroundTask) backgroundTask = UIBackgroundTaskInvalid } 

而只是调用self.registerBackgroundTask()使应用程序在后台运行三分钟。

接下来我要去尝试的是后台抓取和小部件运行服务,在这里我只是想有一些build议,有没有什么机会,以上两个之一将工作?

这听起来像“与外部配件沟通”将是适合您的应用程序的背景模式。 请参阅Apple Docs以供参考。 您必须为您的项目启用Backround模式,并将该值设置为“external-accessory”。 然后你可以在后台进行小的下载。 苹果提到心率监视器就是一个例子。

请注意,持续的后台投票是浪费能源,并会迅速耗尽电池。 检查是否真的需要你的应用程序。 如果用户只需要不频繁的通知/警报,远程通知将是一个更好的解决scheme。 我在自己的项目中使用远程通知,它工作非常stream畅和可靠。 额外的好处是,即使用户之前closures了应用程序,它也会唤醒应用程序。

超过3分钟。 你将被启用任何模式。 否则,当应用程序将进入后台应用程序。 3分钟后,App不会执行任何操作。 在这里输入图像说明