如何永远在后台运行iOS应用程序?

Ame*_*has 6 ios swift

我只为自己制作一个 iOS 应用程序。当应用程序在后台时,我需要每 30 分钟执行一次某些代码。

因为我只是这个应用程序的用户,所以不需要担心击球率和苹果审查过程。我可以使用任何/所有背景模式 VOIP、音乐等。

是否可以每 30 分钟在后台运行该代码?请指导我方向。

Imr*_*ran 4

这是有可能的。

一种方法是创建一个虚假的 VPN 数据包隧道扩展。并将您的代码放入 VPN Manager 类中。当您的应用程序在后台运行时,VPN 扩展部分将继续运行,甚至被用户强制停止运行。

你可以在这个方法中编写你的代码

NEPacketTunnelProvider

override func startTunnelWithOptions(options: [String : NSObject]?, completionHandler: (NSError?) -> Void) {

          fetchData()
}

func fetchData() {
        // Do not use the NSTimer here that will not run in background
        let q_background = DispatchQueue.global(qos: .background)
        let delayInSeconds: Double = 300.0 // seconds
        let popTime = DispatchTime.now() +  DispatchTimeInterval.seconds(Int(delayInSeconds))
        q_background.asyncAfter(deadline: popTime) {
        // Fetch your data from server and generate local notification by using UserNotifications framework 
            fetchData()
        }
    }

Run Code Online (Sandbox Code Playgroud)

  • @bigreddawg 我在应用程序商店有一个使用这种方法的工作应用程序。我们每 5 分钟 ping 一次服务器。当设备不处于空闲(睡眠)状态时,此方法将继续工作。 (3认同)