Swift 4 连续后台任务不工作
Swift 4 continous background task not working
我试过使用 NSTimer 来安排及时的后台任务。但是,它在某个时候停止工作(不知道问题出在哪里),并且当用户试图故意终止应用程序时它也会停止。
无论我的应用程序处于前台还是后台,我都需要每 1 分钟调用一次 API。类似于本机 iOS 闹钟应用程序(类似于创建重复闹钟)。
请提供任何帮助。提前致谢。
P.S。我是 swift 开发的新手。
简短的回答是 "You can't do that."Apple 不允许第 3 方应用程序在后台持续 运行,除了一些非常具体的例外(导航应用程序和流媒体音乐应用程序是示例。)
为了测试,您可以将您的应用设置为导航应用,它会被允许在后台持续运行,但是当您尝试将其提交到应用商店时会被拒绝.
您有两个选择:
- 创建每分钟触发的重复本地通知。
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 并要求您的用户在出现提示时 始终允许位置 。
他们你将在 locationManager(_:didUpdateLocations:) 每 X 间隔获得位置更新。
我试过使用 NSTimer 来安排及时的后台任务。但是,它在某个时候停止工作(不知道问题出在哪里),并且当用户试图故意终止应用程序时它也会停止。
无论我的应用程序处于前台还是后台,我都需要每 1 分钟调用一次 API。类似于本机 iOS 闹钟应用程序(类似于创建重复闹钟)。
请提供任何帮助。提前致谢。
P.S。我是 swift 开发的新手。
简短的回答是 "You can't do that."Apple 不允许第 3 方应用程序在后台持续 运行,除了一些非常具体的例外(导航应用程序和流媒体音乐应用程序是示例。)
为了测试,您可以将您的应用设置为导航应用,它会被允许在后台持续运行,但是当您尝试将其提交到应用商店时会被拒绝.
您有两个选择: - 创建每分钟触发的重复本地通知。
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 并要求您的用户在出现提示时 始终允许位置 。 他们你将在 locationManager(_:didUpdateLocations:) 每 X 间隔获得位置更新。