我尝试过使用NSTimer来安排及时的后台任务。但是,它在某些时候停止工作(不知道问题是什么),并且当用户试图故意杀死应用程序时它也会停止。
我需要在每1分钟后调用一次API,无论我的应用程序处于前台和后台。与本机iOS警报应用程序类似(创建重复警报的类型)。
请提供任何帮助。提前谢谢。
P.S。我是快速发展的新手。
答案 0 :(得分:0)
简短的回答是"你不能这样做。" Apple不允许第三方应用程序在后台连续运行,只有一些非常具体的例外(导航应用程序和流媒体音乐应用程序就是例子。)
为了进行测试,您可以将应用设置为导航应用,并允许它在后台连续运行,但当您尝试将其提交到应用商店时,您将被拒绝。
答案 1 :(得分:0)
您有两种选择: - 创建每分钟触发的重复本地通知。
func repeatNotification() {
let content = UNMutableNotificationContent()
content.title = "It's Time!!"
content.body = "This is a body"
content.categoryIdentifier = "my.reminder.category"
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 60.0, repeats: true)
let request = UNNotificationRequest(identifier: "my.reminder", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request) { (error) in
if let error = error {
print("error in allowing notifications: \(error.localizedDescription)")
}
}
print("added notification:\(request.identifier)")
}
当通知被触发时,您将在 AppDelegate userNotificationCenter中获得回调:willPresentNotification:withCompletionHandler:
您的第二个选择是注册为后台位置应用。基本上,即使不使用您的应用,您也会要求您的用户始终允许定位。这将允许您无限期地在后台运行,但这是以超快速耗尽电池电量为代价的。
如果选择此选项,则需要设置location manager并在出现提示时要求用户始终允许位置。 他们每隔X区间就会在 locationManager(_:didUpdateLocations :) 中获得位置更新。