Фоновое задание в iOS 13+ - PullRequest
1 голос
/ 19 марта 2020

У меня есть вопрос относительно iOS Фоновых задач или процесса. У меня есть приложение, которое должно информировать вас с помощью локального уведомления каждые 15 минут , если у вас есть новое письмо -> если у вас его нет, ничего не происходит.

Я нашел много учебников по Swift 4, Swift 5, но только немногие должны работать над iOS 13 и новым фреймворком BackgroundTask. Я попробовал все из них, и я не получил рабочее решение (сначала я получаю ошибки, потому что я пробовал это на Симуляторе, теперь я получаю сообщение "Не могу закончить задачу bg ..." - Кажется, это ошибка в Xcode .) и приложение не может обновить sh без причины.

AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    UNUserNotificationCenter.current().delegate = self
    registerBackgroundTaks()

    return true
}

func applicationDidEnterBackground(_ application: UIApplication) {
    scheduleEmailFetcher()
}

//MARK: Register BackGround Tasks
private func registerBackgroundTaks() {
    BGTaskScheduler.shared.register(forTaskWithIdentifier: "com.InformationSystem.emailFetch", using: nil) { task in
        //This task is cast with processing request (BGProcessingTask)
        self.setNotification()
        self.handleEmailFetcher(task: task as! BGProcessingTask)
    }
}

func cancelAllPandingBGTask() {
    BGTaskScheduler.shared.cancelAllTaskRequests()
}

func handleEmailFetcher(task: BGProcessingTask) {
    scheduleEmailFetcher() // Recall

    task.expirationHandler = {
        self.cancelAllPandingBGTask()
    }

    print("Handling BG Task!")
    // GET Request to server and other logic here?
    setNotification()

    task.setTaskCompleted(success: true)

}

func scheduleEmailFetcher() {
    let request = BGProcessingTaskRequest(identifier: "com.InformationSystem.emailFetch")
    request.requiresNetworkConnectivity = true
    request.requiresExternalPower = false
    print("Scheduled")
    request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60) 
    do {
        try BGTaskScheduler.shared.submit(request)
    } catch {
        print("Could not schedule email fetch: \(error)")
    }
}

Есть ли кто-нибудь, кто может помочь мне избавиться от него ?

Большое спасибо за помощь!

...