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

时间:2017-02-27 10:29:25

标签: ios swift widget background-process

我正在使用与服务器存在MQTT连接的应用程序,并且服务器正在相应地发送与设备和UI更改相关的一些值。但是当应用程序处于后台时,用户应该获得某些值已更改的本地通知。我知道iOS中不允许后台服务,但我想确保没有办法实现这一点。

我已成功通过UIApplication.shared.beginBackgroundTask在后​​台添加了应用程序的本地通知,但在Apple终止应用程序后,它只能正常工作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()即可让应用在后台运行三分钟。

接下来我要尝试的是后台获取和小部件来运行服务,在这里我只想要一些建议,那么上面两个中的一个是否有效?

2 个答案:

答案 0 :(得分:1)

超过3分钟。您将启用任何模式。否则,当应用程序将进入后台应用程序。 3分钟后.App将不会执行任何操作。 enter image description here

答案 1 :(得分:0)

听起来像#34;与外部附件进行通信"将是适合您的应用程序的后台模式。 请参阅Apple Docs以供参考。 您必须为项目激活Backround Mode并将值设置为" external-accessory"。然后你可以在后台进行持续的小型下载。 Apple提到心率监测器就是一个例子。

请注意,持续的背景调查会浪费能源并迅速耗尽电池电量。检查您的应用程序是否真的需要它。如果用户只需要不频繁的通知/警报,远程通知将是一个更好的解决方案。我在自己的项目中使用远程通知,它非常流畅可靠。额外的好处是,即使用户之前关闭了它,它也会唤醒应用程序。