Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在iOS后台运行服务以接收本地通知?_Ios_Swift_Widget_Background Process - Fatal编程技术网

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

如何在iOS后台运行服务以接收本地通知?,ios,swift,widget,background-process,Ios,Swift,Widget,Background Process,我正在开发一个应用程序,其中有一个和服务器的MQTT连接,服务器正在发送一些与设备和UI更改相关的值。但当应用程序处于后台时,用户应该得到本地通知,某些值已更改。我知道iOS中不允许使用后台服务,但我想确保这是无法实现的 我通过UIApplication.shared.beginBackgroundTask成功地在后台为应用程序添加了本地通知,但它只在苹果终止应用程序后3分钟有效 func registerBackgroundTask() { backgroundTask

我正在开发一个应用程序,其中有一个和服务器的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分钟后。应用程序将不执行任何操作。

听起来“与外部附件通信”是适合您的应用程序的后台模式。 请参阅以供参考。 您必须为您的项目激活反向模式,并将值设置为“外部附件”。然后你可以在后台进行小规模的下载。苹果公司以心率监测器为例


请注意,连续的后台轮询是一种能源浪费,会很快耗尽电池电量。检查您的应用程序是否真的需要此功能。如果用户只需要很少的通知/警报,那么远程通知将是一个更好的解决方案。我在自己的项目中使用远程通知,它工作非常顺利和可靠。另外一个好处是,即使用户以前关闭过应用程序,它也会唤醒它。

但是我没有使用任何位置更新,那么这样做是正确的吗?如果您没有使用任何模式。后台应用程序在3分钟后将无法运行。因为苹果不允许应用程序在后台运行超过几分钟。是的,我知道如果我不使用任何模式,苹果不允许应用程序在后台继续运行,但我想知道的是,我的情况是在我可以使用的任何模式下运行的?是的,它会解决任何模式。如果选择“位置更新”,则选择“如何在后台工作”。这可能是一个很好的参考,实际上MQTT中有与服务器的套接字连接,在创建连接后,服务器会在某个时间间隔发送设备状态,我不知道如何在后台模式下使用苹果提供的任何上述模式来实现这一点外部附件需要支持外部附件框架。看见对于通用MQTT设备,这是不可能的。要将该设备与iOS一起使用,您需要使其与iOS兼容,或者将其作为“外部附件”,或者使用远程通知。如果您无法更改设备,您需要一个自己的小服务器,它将执行MQTT并将其转换为与iOS/后台兼容的流量。感谢您的解释,我将与我的同事讨论team@transistor你说过“即使用户以前关闭过应用程序,远程通知也会唤醒它。”。你能解释一下吗?你的意思是当应用程序不运行或其他事情时收到警报吗?这当然是一个主要功能。您希望随时收到通知。想象你的电池是空的,而你的手机是关机的。您不想手动启动电子邮件和twitter应用程序以再次获取通知。看见