我尝试使用NSTimer来安排及时的后台任务。但是,它在某个时候停止工作(不知道问题是什么),当用户试图故意杀死应用程序时也会停止工作。
我需要每 1 分钟调用一次 API,无论我的应用程序是否在前台和后台。类似于本机iOS警报应用程序(创建重复警报)。
请任何帮助将是可观的。提前谢谢。
附言我是快速开发的新手。
的回答是"你不能那样做"。Apple 不允许第三方应用程序在后台连续运行,但有一些非常特殊的例外(导航应用程序和流媒体音乐应用程序就是示例)。
为了进行测试,您可以将应用设置为导航应用,并允许它在后台连续运行,但当您尝试将其提交到应用商店时,您将被拒绝。
您有两个选择: - 创建每分钟触发一次的重复本地通知。
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 中获得回调:
您的第二个选择是注册为后台位置应用程序。 基本上,即使不使用您的应用程序,您也会要求用户始终允许位置。这将允许您无限期地在后台运行,但代价是超快耗尽电池电量。
如果选择此选项,则需要设置位置管理器,并要求用户在出现提示时始终允许位置信息。他们将每隔X个时间间隔在locationManager(_:didUpdateLocations:)中获得位置更新。