Sobes.tech
Middle

Hoe zorg je ervoor dat de app op de achtergrond blijft werken?

sobes.tech AI

Antwoord van AI

Om de werking van de app op de achtergrond te garanderen, worden verschillende iOS-mechanismen gebruikt, afhankelijk van het type taak:

  • Achtergrondmodi: Dit zijn vooraf gedefinieerde systeemmodi die het uitvoeren van bepaalde operaties op de achtergrond mogelijk maken. De meest voorkomende:

    • audio: Afspelen of opnemen van audio.
    • location: Locatie tracking.
    • voip: Gebruik van VoIP.
    • fetch: Periodiek downloaden van nieuwe inhoud.
    • processing: Uitvoeren van resource-intensieve taken.
    • remote-notification: Verwerking van pushmeldingen.

    Om achtergrondmodi te activeren, moeten de juiste sleutels worden toegevoegd aan Info.plist of Capabilities worden gebruikt in Xcode.

  • Achtergrondtaak: Hiermee krijgt de app een beperkte periode om de huidige taak te voltooien nadat de app naar de achtergrond is gegaan.

    var backgroundTask: UIBackgroundTaskIdentifier = .invalid
    
    func registerBackgroundTask() {
        backgroundTask = UIApplication.shared.beginBackgroundTask {
            // Beheer van het verlopen
            self.endBackgroundTask()
        }
        // Voer achtergrondtaak uit
        // ...
    }
    
    func endBackgroundTask() {
        UIApplication.shared.endBackgroundTask(backgroundTask)
        backgroundTask = .invalid
    }
    
  • Achtergrond Fetch: Het systeem kan de app periodiek op de achtergrond starten om te controleren op en nieuwe inhoud te downloaden.

    // In AppDelegate, in didFinishLaunchingWithOptions
    UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplication.backgroundFetchIntervalMinimum)
    
    // In didFinishLaunchingWithOptions of in een aparte methode
    func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        // Voer asynchrone gegevensladen uit
        // Aan het einde, roep completionHandler aan met het juiste resultaat:
        // .newData, .noData, .failed
        completionHandler(.newData)
    }
    
  • Achtergrondverwerking: Ontworpen voor het uitvoeren van resource-intensieve taken die veel tijd kunnen kosten. Gebruikt met BGTaskScheduler.

    import BackgroundTasks
    
    let taskID = "com.yourapp.mytask"
    
    func registerBackgroundTasks() {
        BGTaskScheduler.shared.register(forTaskWithIdentifier: taskID) { task in
            // Voer taak uit
            self.handleBackgroundTask(task: task as! BGProcessingTask)
        }
    }
    
    func handleBackgroundTask(task: BGProcessingTask) {
        // Voer een lange taak uit
        // Markeer de taak als voltooid
        task.setTaskCompleted(success: true)
    }
    
    // Plan de taak
    func scheduleBackgroundProcessingTask() {
        let request = BGProcessingTaskRequest(identifier: taskID)
        // Configureer de vereisten voor de uitvoering (bijvoorbeeld netwerkverbinding, batterijstatus)
        request.requiresNetworkConnectivity = true
    
        do {
            try BGTaskScheduler.shared.submit(request)
        } catch {
            print("Kan de taak niet plannen: \(error)")
        }
    }
    
  • Pushmeldingen: Silent pushes kunnen worden gebruikt om de app op de achtergrond te activeren en nieuwe inhoud te downloaden.

  • Work Manager (Android) equivalent voor iOS (indirect): BGTaskScheduler is het equivalent van Android Work Manager, waarmee achtergrondtaken kunnen worden gepland rekening houdend met systeembronnen en beperkingen.

De keuze voor een specifiek mechanisme hangt af van het type taak dat in de achtergrond moet worden uitgevoerd. Het gebruik van een ongeschikt mechanisme kan leiden tot afwijzing van de app tijdens de beoordeling in de App Store en tot snelle beëindiging van achtergrondprocessen door het systeem. Het is ook belangrijk om zuinig te zijn met systeembronnen: batterij, geheugen en CPU.