Расписание фоновых задач в час swift 4 - PullRequest
0 голосов
/ 14 ноября 2018

Я слишком долго искал и пытался решить свою проблему. У меня есть заказы, и мне нужно проверять их обновления на моем бэкэнде C # в час. Даже в фоновом режиме или на переднем плане.

Я пробовал:

var timer = Timer.scheduledTimer(withTimeInterval: 5.0, repeats: true) {
    timer in
    self.updatePedidos(timer: timer)
}
func updatePedidos() {
    print("background started")
    let strdata = Functions.getMostRecentDtPedido()
    Functions.loadOrdersFromLastSyncByApi(strdata)
}

Также:

func applicationDidEnterBackground(_ application: UIApplication) {
    Timer.scheduledTimer(timeInterval: 0.4, target: self, selector: #selector(self.updatePedidos), userInfo: nil, repeats: true)
}
@objc func updatePedidos() {
    print("background started")
    let strdata = Functions.getMostRecentDtPedido()
    Functions.loadOrdersFromLastSyncByApi(strdata)
}

Также:

func applicationDidEnterBackground(_ application: UIApplication) {
    UIApplication.shared.setMinimumBackgroundFetchInterval( 5 )
}
func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler:
    @escaping (UIBackgroundFetchResult) -> Void) {
    print("background started")
    let strdata = Functions.getMostRecentDtPedido()
    Functions.loadOrdersFromLastSyncByApi(strdata)

    if let newData = fetchUpdates() {
        addDataToFeed(newData: newData)
        completionHandler(.newData)
    }

    completionHandler(.noData)
}

И последнее, что я не могу поставить таймер:

NotificationCenter.default.addObserver(self, selector: #selector(updatePedidos), name:UIApplication.didEnterBackgroundNotification, object: nil)
@objc func updatePedidos() {
    print("background started")
    let strdata = Functions.getMostRecentDtPedido()
    Functions.loadOrdersFromLastSyncByApi(strdata)
}

Все они не печатают "фон запущен" в фоновом состоянии, только на переднем плане. Я добавил на info.plist:

<key>UIBackgroundModes</key>
    <array>
        <string>fetch</string>
    </array>

1 Ответ

0 голосов
/ 14 ноября 2018

Вы можете попробовать это, используя автоматическое push-уведомление. Каждый час отправляйте 1 тихое push-уведомление, а также активируйте приложение в фоновом режиме и выполняйте задание в течение некоторого времени.

Подробнее о выполнении фоновых задач вы можете прочитать в статье ниже:

https://www.hackingwithswift.com/example-code/system/how-to-run-code-when-your-app-is-terminated

Есть ли способ активировать приостановленное приложение в iOS без вмешательства пользователя или сервера

...