Swift:在后台运行计时器并发送通知
我知道已经有关于这个话题的问题了,但这对我不起作用,所以我想再问一次这个问题 我想做的是: 我有一个简单的间隔计时器应用程序,你可以设置你的间隔和休息时间。当用户关闭应用程序(未完成,只是向上滑动进入主屏幕)时,间隔或中断再次开始时,他应该会收到消息。我已经试过两种不同的方法 一,。 我集成了后台模式、写入和通知用户的功能。当间隔/中断开始时,在计时器中调用该函数Swift:在后台运行计时器并发送通知,swift,timer,apple-push-notifications,background-process,Swift,Timer,Apple Push Notifications,Background Process,我知道已经有关于这个话题的问题了,但这对我不起作用,所以我想再问一次这个问题 我想做的是: 我有一个简单的间隔计时器应用程序,你可以设置你的间隔和休息时间。当用户关闭应用程序(未完成,只是向上滑动进入主屏幕)时,间隔或中断再次开始时,他应该会收到消息。我已经试过两种不同的方法 一,。 我集成了后台模式、写入和通知用户的功能。当间隔/中断开始时,在计时器中调用该函数 func notify(title: String, message: String){ let content = UNM
func notify(title: String, message: String){
let content = UNMutableNotificationContent()
content.title = title
content.body = message
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false)
let req = UNNotificationRequest(identifier: "MSG", content: content, trigger: trigger)
UNUserNotificationCenter.current().add(req, withCompletionHandler: nil)
}
代码在模拟器上完美地执行。计时器在后台运行,并将通知发送给用户。但是,当我在实际设备上运行代码时,计时器停止运行,因此不会发送通知。我读到不可能在后台运行计时器。这是真的还是有办法
func notify(trainingsState: [TrainingsState]){
let center = UNUserNotificationCenter.current()
let content = UNMutableNotificationContent()
content.title = trainingsState[0].name
content.body = trainingsState[0].msg ?? "Error"
var trigger = UNTimeIntervalNotificationTrigger(timeInterval: Double(insgesamt), repeats: false)
var request = UNNotificationRequest(identifier: "startedExercise", content: content, trigger: trigger)
center.add(request) { (error) in
if let error = error{
print("Error: \(error)")
}
}
var dauerInsgesamt: Double{
var dauer = 0.0
for _ in 1...Int(daten.durchgaenge){
for _ in übungListe.übungen{
dauer += daten.intervallInsgesamt
dauer += daten.pauseInsgesamt
}
dauer -= daten.pauseInsgesamt
dauer += daten.pauseZwischenDurchgängenInsgesamt
}
print(dauer)
return dauer
}
var dauerBisGroßePause: Double{
var dauer = 0.0
for _ in übungListe.übungen{
dauer += daten.intervallInsgesamt
dauer += daten.pauseInsgesamt
}
dauer -= daten.pauseInsgesamt
print(dauer)
return dauer
}
for übung in trainingsState{
content.title = übung.name
content.body = übung.msg ?? ""
if !übung.isSpecial{
trigger = UNTimeIntervalNotificationTrigger(timeInterval: übung.isBreak ? daten.pauseInsgesamt : daten.intervallInsgesamt, repeats: true)
}else{
if übung.dauer == nil{
trigger = UNTimeIntervalNotificationTrigger(timeInterval: dauerBisGroßePause, repeats: true)
}else{
trigger = UNTimeIntervalNotificationTrigger(timeInterval: dauerInsgesamt, repeats: false)
}
}
request = UNNotificationRequest(identifier: übung.id.uuidString, content: content, trigger: trigger)
center.add(request) { (error) in
if let error = error{
print("Error: \(error)")
}
}
}
}
感谢所有:)当应用程序暂停或终止时,计时器将失效。您可以使用后台模式唤醒应用程序以执行特定任务(您有30秒的时间在后台完成任务) 以下是2019年的一些资料,还有到2020年的链接: