BackgroundTask iOS 13 Swift

时间:2019-08-08 13:21:23

标签: ios swift background-thread

我想在后台运行该功能。但是我得到一个错误。我收到的错误是

  

“ nw_connection_receive_internal_block_invoke。

我为什么会遇到这个问题?我正在iOS 13设备上尝试。但是我无法在后台运行该应用程序。我在Info.plist中添加了后台运行功能。我想在后台运行interator.tickTimer函数。但是我遇到了错误。在后台不起作用。在后台,我想定期从Firebase检索数据。

import BackgroundTasks

  @available(iOS 13.0, *)
  extension AppDelegate {

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

      func scheduleImageFetcher() {
          let request = BGProcessingTaskRequest(identifier: "....")
          request.requiresNetworkConnectivity = true // Need to true if your task need to network process. Defaults to false.
          request.requiresExternalPower = false
          request.earliestBeginDate = Date(timeIntervalSinceNow: 40)

          do {

              try BGTaskScheduler.shared.submit(request)
          } catch {
              print("Could not schedule image featch: \(error)")
          }
      }


      func handleAppRefreshTask(task: BGAppRefreshTask) {

          task.expirationHandler = {

          }
         DispatchQueue.main.async {

         let interator =  MainTableViewController()
         interator.tickTimer()


           }
          task.setTaskCompleted(success: true)
      }

      func handleImageFetcherTask(task: BGProcessingTask) {
          scheduleImageFetcher() // Recall

          //Todo Work
          task.expirationHandler = {

          }
          task.setTaskCompleted(success: true)

      }
  }
  xtension AppDelegate {

      func registerLocalNotification() {
          let notificationCenter = UNUserNotificationCenter.current()
          let options: UNAuthorizationOptions = [.alert, .sound, .badge]

          notificationCenter.requestAuthorization(options: options) {
              (didAllow, error) in
              if !didAllow {
                 // print("User has declined notifications")
              }
          }
      }

      func scheduleLocalNotification() {
          let notificationCenter = UNUserNotificationCenter.current()
          notificationCenter.getNotificationSettings { (settings) in
              if settings.authorizationStatus == .authorized {
                  self.fireNotification()
              }
          }
      }

      func fireNotification() {
          // Create Notification Content
          let notificationContent = UNMutableNotificationContent()

          // Configure Notification Content
          notificationContent.title = "Bg"
          notificationContent.body = "BG Notifications."

          // Add Trigger
          let notificationTrigger = UNTimeIntervalNotificationTrigger(timeInterval: 1.0, repeats: false)

          // Create Notification Request
          let notificationRequest = UNNotificationRequest(identifier: "local_notification", content: notificationContent, trigger: notificationTrigger)

          // Add Request to User Notification Center
          UNUserNotificationCenter.current().add(notificationRequest) { (error) in
              if let error = error {
                  print("Unable to Add Notification Request (\(error), \(error.localizedDescription))")
              }
          }
      }
  }
  @UIApplicationMain
  class AppDelegate: UIResponder, UIApplicationDelegate, UITabBarControllerDelegate {

      var window: UIWindow?
   func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    if #available(iOS 13.0, *) {
              registerBackgroundTaks()
              registerLocalNotification()

          } else {
              // Fallback on earlier versions
          }

          return true
     }

      func applicationDidEnterBackground(_ application: UIApplication) {
          if #available(iOS 13.0, *) {
              cancelAllPandingBGTask()
                     scheduleImageFetcher()
          } else {
              // Fallback on earlier versions
          }

      }

      //MARK: Regiater BackGround Tasks
      @available(iOS 13.0, *)
      private func registerBackgroundTaks() {

          BGTaskScheduler.shared.register(forTaskWithIdentifier: "....-...", using: nil) { task in
              //This task is cast with processing request (BGProcessingTask)
              self.scheduleLocalNotification()

              self.handleImageFetcherTask(task: task as! BGProcessingTask)
          }   
      }

0 个答案:

没有答案