Swift 4连续后台任务无法正常工作

时间:2017-10-12 18:30:27

标签: ios background nstimer swift4 repeatingalarm

我尝试过使用NSTimer来安排及时的后台任务。但是,它在某些时候停止工作(不知道问题是什么),并且当用户试图故意杀死应用程序时它也会停止。

我需要在每1分钟后调用一次API,无论我的应用程序处于前台和后台。与本机iOS警报应用程序类似(创建重复警报的类型)。

请提供任何帮助。提前谢谢。

P.S。我是快速发展的新手。

2 个答案:

答案 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 :) 中获得位置更新。