Swift 4 连续后台任务不起作用



我尝试使用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:)中获得位置更新。

最新更新