如何运行一个服务在iOS后台接收本地通知?
How to run a service in iOS background to receive local notification?
我正在开发与服务器建立 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()
即可使应用程序 运行 能够在后台运行三分钟。
接下来我要尝试的是 运行 服务的后台获取和小部件,在这里我只想提出一些建议,上面两个中的一个是否有可能工作?
超过 3 分钟。您将启用任何模式。否则当应用程序将进入后台应用程序时。 3 min.App 之后将不会执行任何操作。
听起来 "Communicating with an External Accessory" 是适合您的应用程序的后台模式。
请参阅 Apple Docs 以供参考。
您必须为项目激活背景模式并将值设置为 "external-accessory"。然后您可以在后台进行持续的小型下载。 Apple 以心率监测器为例。
请注意,持续的后台轮询会浪费能源,并且会很快耗尽电池电量。检查您的应用程序是否真的需要它。如果用户只是偶尔需要 notifications/alarms,远程通知将是一个更好的解决方案。我在自己的项目中使用远程通知,它工作起来非常流畅和可靠。额外的好处是,即使用户之前关闭了它,它也会唤醒应用程序。
我正在开发与服务器建立 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()
即可使应用程序 运行 能够在后台运行三分钟。
接下来我要尝试的是 运行 服务的后台获取和小部件,在这里我只想提出一些建议,上面两个中的一个是否有可能工作?
超过 3 分钟。您将启用任何模式。否则当应用程序将进入后台应用程序时。 3 min.App 之后将不会执行任何操作。
听起来 "Communicating with an External Accessory" 是适合您的应用程序的后台模式。 请参阅 Apple Docs 以供参考。 您必须为项目激活背景模式并将值设置为 "external-accessory"。然后您可以在后台进行持续的小型下载。 Apple 以心率监测器为例。
请注意,持续的后台轮询会浪费能源,并且会很快耗尽电池电量。检查您的应用程序是否真的需要它。如果用户只是偶尔需要 notifications/alarms,远程通知将是一个更好的解决方案。我在自己的项目中使用远程通知,它工作起来非常流畅和可靠。额外的好处是,即使用户之前关闭了它,它也会唤醒应用程序。