我仅为自己制作一个iOS应用程序。当应用程序处于后台时,我需要每30分钟执行一次某些代码。
由于我只是该应用的用户,因此无需担心面糊百分比和苹果审核过程。我可以使用任何/所有背景模式VOIP,音乐等。
是否可以每30分钟在后台运行该代码? 请指引我的方向。
答案 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。您的应用也会被应用商店接受。