Sobes.tech
Middle

Чӣ гуна таъмин кардан мумкин аст, ки барнома дар пасзамана фаъолият кунад?

sobes.tech AI

Ҷавоб аз AI

Барои таъмини кори барнома дар режими пасзамана, механизмҳои гуногуни iOS истифода мешаванд, вобаста ба навъи вазифа:

  • Режимҳои пасзамана (Background Modes): Инҳо режимҳои пешфарзии системаи мебошанд, ки имкон медиҳанд, ки баъзе амалҳоро дар режими пасзамана иҷро кунанд. Баъзеи маъмул:

    • audio: Навозиш ё сабт кардани аудио.
    • location: пайгирии макон.
    • voip: кор бо VoIP.
    • fetch: боргирии мунтазами мундариҷаи нав.
    • processing: иҷрои вазифаҳои сарборӣ.
    • remote-notification: коркарди огоҳиномаҳои push.

    Барои фаъол кардани режимҳои пасзамана бояд калидҳои мувофиқро ба Info.plist илова кунед ё Capabilities-ро дар Xcode истифода баред.

  • Вазифа дар пасзамана (Background Task): Имкон медиҳад, ки мӯҳлати маҳдуд барои анҷоми вазифаи ҳозира пас аз гузаштан ба режими пасзамана гирифта шавад.

    var backgroundTask: UIBackgroundTaskIdentifier = .invalid
    
    func registerBackgroundTask() {
        backgroundTask = UIApplication.shared.beginBackgroundTask {
            // Ҳалли тамом шудани вақт
            self.endBackgroundTask()
        }
        // Иҷрои вазифаи пасзамана
        // ...
    }
    
    func endBackgroundTask() {
        UIApplication.shared.endBackgroundTask(backgroundTask)
        backgroundTask = .invalid
    }
    
  • Fetch дар пасзамана (Background Fetch): Имкон медиҳад, ки система ба таври мунтазам барнома дар режими пасзамана оғоз кунад барои санҷиш ва боргирии мундариҷаи нав.

    // Дар AppDelegate, дар didFinishLaunchingWithOptions
    UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplication.backgroundFetchIntervalMinimum)
    
    // Дар didFinishLaunchingWithOptions ё дар як методи алоҳида
    func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        // Иҷрои боргирии асинхронӣ
        // Пас аз анҷом, моҳиятан ба completionHandler натиҷаи мувофиқро медиҳем:
        // .newData, .noData, .failed
        completionHandler(.newData)
    }
    
  • Коркарди дар пасзамана (Background Processing): Барои иҷрои вазифаҳои сарборӣ, ки метавонанд муддати тӯлонӣ гиранд, пешбинӣ шудааст. Бо BGTaskScheduler истифода мешавад.

    import BackgroundTasks
    
    let taskID = "com.yourapp.mytask"
    
    func registerBackgroundTasks() {
        BGTaskScheduler.shared.register(forTaskWithIdentifier: taskID) { task in
            // Иҷрои вазифа
            self.handleBackgroundTask(task: task as! BGProcessingTask)
        }
    }
    
    func handleBackgroundTask(task: BGProcessingTask) {
        // Иҷрои вазифаи дарозмуддат
        // Нишон додани вазифа ҳамчун анҷомёфта
        task.setTaskCompleted(success: true)
    }
    
    // Тарҳрезии вазифа
    func scheduleBackgroundProcessingTask() {
        let request = BGProcessingTaskRequest(identifier: taskID)
        // Танзим кардани талаботҳо ба муҳити иҷро (масалан, дастрасии шабака, пуркунӣ батарея)
        request.requiresNetworkConnectivity = true
    
        do {
            try BGTaskScheduler.shared.submit(request)
        } catch {
            print("Намудани имконияти тарҳрезии вазифа: \(error)")
        }
    }