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 间隔获得位置更新。