Comment assurer la continuité du fonctionnement de l'application en arrière-plan?
sobes.tech IA
Réponse de l'IA
Pour assurer le fonctionnement de l’application en arrière-plan, différents mécanismes iOS sont utilisés, en fonction du type de tâche :
-
Modes en arrière-plan : Ce sont des modes système prédéfinis permettant d’effectuer certaines opérations en arrière-plan. Les plus courants :
audio: Lecture ou enregistrement audio.location: Suivi de la localisation.voip: Utilisation de VoIP.fetch: Téléchargement périodique de contenu nouveau.processing: Exécution de tâches intensives.remote-notification: Traitement des notifications push.
Pour activer ces modes, il faut ajouter les clés correspondantes dans
Info.plistou utiliser Capabilities dans Xcode. -
Tâche en arrière-plan : Permet d’obtenir une période limitée pour terminer la tâche en cours après que l’application passe en arrière-plan.
var backgroundTask: UIBackgroundTaskIdentifier = .invalid func registerBackgroundTask() { backgroundTask = UIApplication.shared.beginBackgroundTask { // Gestion de l’expiration self.endBackgroundTask() } // Exécuter la tâche en arrière-plan // ... } func endBackgroundTask() { UIApplication.shared.endBackgroundTask(backgroundTask) backgroundTask = .invalid } -
Fetch en arrière-plan : Permet au système de lancer périodiquement l’application en arrière-plan pour vérifier et télécharger du contenu nouveau.
// Dans AppDelegate, dans didFinishLaunchingWithOptions UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplication.backgroundFetchIntervalMinimum) // Dans didFinishLaunchingWithOptions ou dans une méthode séparée func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { // Effectuer un chargement de données asynchrone // À la fin, appeler completionHandler avec le résultat approprié : // .newData, .noData, .failed completionHandler(.newData) } -
Traitement en arrière-plan : Conçu pour effectuer des tâches intensives qui peuvent prendre du temps. Utilisé avec
BGTaskScheduler.import BackgroundTasks let taskID = "com.yourapp.mytask" func registerBackgroundTasks() { BGTaskScheduler.shared.register(forTaskWithIdentifier: taskID, using: nil) { task in // Effectuer la tâche self.handleBackgroundTask(task: task as! BGProcessingTask) } } func handleBackgroundTask(task: BGProcessingTask) { // Effectuer une tâche longue // Marquer la tâche comme terminée task.setTaskCompleted(success: true) } // Planifier la tâche func scheduleBackgroundProcessingTask() { let request = BGProcessingTaskRequest(identifier: taskID) // Configurer les exigences de l’environnement d’exécution (par ex., connectivité réseau, charge de la batterie) request.requiresNetworkConnectivity = true do { try BGTaskScheduler.shared.submit(request) } catch { print("Impossible de planifier la tâche : \(error)") } } -
Notifications push : Les pushes silencieux peuvent être utilisés pour activer l’application en arrière-plan et charger du contenu nouveau.
-
Work Manager (Android) équivalent pour iOS (indirect) :
BGTaskSchedulerest l’équivalent de Android Work Manager, permettant de planifier des tâches en arrière-plan en tenant compte des ressources et des contraintes du système.
Le choix d’un mécanisme spécifique dépend du type de tâche à effectuer en arrière-plan. L’utilisation d’un mécanisme inapproprié peut entraîner le rejet de l’application lors de la revue sur l’App Store et la terminaison rapide des processus en arrière-plan par le système. Il est également important de respecter les ressources système : batterie, mémoire et CPU.