Ежедневно запускайте задание в определенное время - PullRequest
0 голосов
/ 02 июля 2018

Я хотел бы запускать функцию (совершать вызов API) ежедневно в определенное время, например, 10 утра и 10 вечера ежедневно. Каким будет эквивалент cronjob в swift?

Я пытался реализовать Timer как:

var dateComponents = DateComponents()

dateComponents.timeZone = TimeZone(abbreviation: "NPT") 
dateComponents.hour = 10
dateComponents.minute = 00

let userCalendar = Calendar.current
let myTime = userCalendar.date(from: dateComponents)

let timer = Timer(fireAt: myTime!, interval: 0, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: false)
RunLoop.main.add(timer, forMode: RunLoopMode.commonModes)

Функция выбора:

@objc func updateTimer() {
    print("Hello")
}

Вместо запуска в указанное время, функция выбора выполняется каждый раз, когда я запускаю приложение, а не в указанное время. Как я могу решить это?

Редактировать: Мне нужно, чтобы это также запускалось из фона. Я буду использовать службу определения местоположения в моем приложении.

1 Ответ

0 голосов
/ 02 июля 2018

Невозможно достичь своих целей без использования push-уведомлений. Timer используют циклы выполнения и, следовательно, не работают в фоновом режиме. Также нет фонового режима для регулярных вызовов API.

Единственный вариант - отправлять push-уведомления с вашего сервера в указанное время каждый день и в ответ на получение push-уведомлений в вашем приложении выполнить вызов API. Конечно, для работы push-уведомлений вам понадобится подключение к Интернету, но, поскольку вы хотите совершать вызовы API, это не будет иметь значения, поскольку для вызовов API все равно потребуется подключение к Интернету.

...