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

标签 ios swift widget background-process

我正在开发与服务器建立 MQTT 连接的应用程序,并且服务器正在发送一些与设备和 UI 相应更改相关的值。但是,当应用程序处于后台时,用户应该会收到某些值已更改的本地通知。我知道 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() 即可让应用在后台运行三分钟。

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

最佳答案

听起来“与外部附件通信”将是适合您的应用程序的背景模式。 参见 Apple Docs以供引用。 您必须为您的项目激活后台模式并将值设置为“外部附件”。然后您可以在后台进行持续的小型下载。 Apple 以心率监测器为例。

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

关于ios - 如何在 iOS 后台运行服务接收本地通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42483368/

相关文章:

ios - NSURLConnection/CFURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9813)iOS

ios - 在 https ://parse. com/中使用 Distinct 关键字

swift - 模式 : Using a default value when optional is nil

javascript - 如何在 dojo javascript 中取消注册或重新注册小部件

Android 不确定进度条没有动画

ios - 我如何在 iOS 中为 ECSlidingViewController 构建 3D 转换?

ios - 从 JTSImageViewController 解除时重置 View

ios - UICollectionViewCell 在 collectionview 的多个单元格中看到的一个更改

swift - 谁在以正确的方式实现 ISO8601? swift 还是 Spring ?

python - Matplotlib 更新 slider 小部件范围