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

时间:2019-06-10 07:30:12

标签: ios swift

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

由于我只是该应用的用户,因此无需担心面糊百分比和苹果审核过程。我可以使用任何/所有背景模式VOIP,音乐等。

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

2 个答案:

答案 0 :(得分:3)

可能。

一种方法是创建一个虚假的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()
        }
    }

答案 1 :(得分:0)

为什么不选择Background Fetch

它可用于新闻或社交媒体之类的应用程序,因此即使在用户交互之前,这些应用程序也可以具有最新数据。它允许按原样定期执行后台操作。

一个简单的调用将每小时获取一次数据。

// Fetch data once an hour.
   UIApplication.shared.setMinimumBackgroundFetchInterval(3600)

最后,它不是解决方法或任何私有API。您的应用也会被应用商店接受。