Live Activity — qu'est-ce que c'est, widgets sur l'écran de verrouillage

Auteur : IT Sectr Publié le : 2026-02-15 Temps de lecture : 9 min

Live Activity est un widget dynamique sur l'écran de verrouillage de l'iPhone et dans Dynamic Island, affichant des informations en temps réel : statut de livraison, scores sportifs, minuteries et lecture musicale. Il est implémenté via ActivityKit (Swift, iOS 16.1+) conjointement avec WidgetKit. Live Activity se met à jour localement ou via des notifications push, prend en charge plusieurs états et est terminée par le système après la fin de l'événement. En savoir plus sur ActivityKit Documentation.

Points clés

  • Live Activity — widget en temps réel sur l'écran de verrouillage et Dynamic Island
  • ActivityKit — framework pour lancer et gérer les Live Activities dans iOS 16.1+
  • Mises à jour push — le serveur envoie un nouvel état via les notifications push ActivityKit
  • États — chaque Activity prend en charge les états actif et terminé avec différentes IU
  • Dynamic Island — affichage compact de Live Activity sur iPhone 14 Pro et ultérieur

Qu'est-ce que Live Activity — Widget sur l'écran de verrouillage ?

Live Activity est une extension de WidgetKit qui affiche du contenu dynamique sur l'écran de verrouillage de l'iPhone et dans Dynamic Island. Contrairement à un widget statique qui se met à jour sur une minuterie système, Live Activity est lancée par l'application et vit pendant un temps limité — jusqu'à 8 heures pour une Activity active et jusqu'à 4 heures après la fin. L'utilisateur voit des données à jour sans déverrouiller l'appareil : statut de livraison, distance jusqu'à la destination dans un taxi, résultats de match ou progression d'entraînement.

ActivityKit est un framework pour travailler avec les Live Activities, présenté dans iOS 16.1. Il fournit une API pour demander, mettre à jour et terminer des Activities. Une Activity est un objet avec un contenu et un état. Le contenu (ActivityContent) définit les données statiques, tandis que l'état (ActivityState) définit les données dynamiques qui changent dans le temps. Le système décide lui-même quand rendre le nouvel état — cela économise la batterie et garantit des animations fluides.

Chaque Live Activity est identifiée de manière unique par un ActivityID et est liée à un processus — l'application qui l'a créée. Le système peut terminer l'Activity lorsque la mémoire est faible ou que la charge de la batterie est insuffisante. Le développeur reçoit une notification de terminaison forcée via le délégué ActivityKit et peut sauvegarder le dernier état pour restauration.

Architecture d'ActivityKit et WidgetKit

L'architecture de Live Activity repose sur deux frameworks : WidgetKit est responsable du rendu des vues SwiftUI, ActivityKit gère le cycle de vie de l'Activity. Le développeur crée un WidgetBundle avec prise en charge de LiveActivityConfiguration. Chaque configuration définit le type de données (Attributes et State) et une vue SwiftUI que le système rend sur l'écran de verrouillage et Dynamic Island. Les données sont transmises via ActivityAttributes — une structure avec des champs let pour le contenu et des champs var pour l'état.

ComposantObjectifAPI
AttributesDonnées statiques de toute l'Activitylet name: String, let icon: String
ContentStateÉtat dynamique, modifiable lors de la mise à jourvar progress: Double, var status: Status
ActivityObjet de demande et de gestion de l'ActivityActivity.request(attributes:content:)
PushTokenJeton pour les mises à jour push du serveuractivity.pushToken publisher
ActivityUIVue SwiftUI pour l'écran de verrouillage et Dynamic IslandLockScreenView, ExpandedView, CompactView

Cycle de vie de l'Activity comprend trois phases : active (le système affiche et met à jour), finale (l'activité est terminée mais l'IU est encore visible 4 heures), supprimée (le système supprime l'IU). L'application peut terminer l'Activity à tout moment. Le système termine également les Activities de force — par exemple, lors du redémarrage de l'appareil ou de l'expiration de la limite de 8 heures.

swift
import ActivityKit

struct DeliveryAttributes: ActivityAttributes {
    public struct ContentState: Codable & Hashable {
        var status: DeliveryStatus
        var estimatedMinutes: Int
    }
    var orderNumber: String
    var restaurantName: String
}

WidgetBundle enregistre Live Activity via la macro @main : le widget renvoie une liste de configurations incluant LiveActivityConfiguration. Sur la base de cette configuration, le système sait quels types de données attendre et comment rendre l'IU dans différents états — compact, minimal et étendu pour Dynamic Island.

Créer Live Activity avec WidgetKit et SwiftUI

Créer une Activity commence par une demande à ActivityKit. L'application appelle Activity.request(attributes:content:pushType:) avec des données initiales. Le système vérifie si Dynamic Island est disponible sur l'appareil et renvoie un objet Activity. La demande peut échouer si la limite d'Activities actives est dépassée — généralement pas plus de 5 simultanément. Après une demande réussie, le système affiche le widget sur l'écran de verrouillage et, si disponible, dans Dynamic Island.

swift
let attributes = DeliveryAttributes(
    orderNumber: "A-1234",
    restaurantName: "Pizza House"
)

let initialState = DeliveryAttributes.ContentState(
    status: DeliveryStatus.preparing,
    estimatedMinutes: 30
)

do {
    let activity = try await Activity<DeliveryAttributes>.request(
        attributes: attributes,
        content: ActivityContent(state: initialState, staleDate: nil),
        pushType: .token
    )
    print("Activity started: \(activity.id)")
} catch {
    print("Failed: \(error)")
}

La vue SwiftUI pour Live Activity utilise les structures LockScreenView, ExpandedView et CompactView de WidgetKit. La vue reçoit le contexte (ActivityViewContext) avec les attributs et l'état actuels. La mise à jour de la vue se produit automatiquement lorsqu'un nouvel état arrive du système. Live Activity ne prend en charge qu'un ensemble limité de composants SwiftUI — Text, Image, HStack, VStack et quelques modificateurs.

Chaque vue Live Activity doit être légère et rapide — le système refuse de rendre les vues lourdes. La limite de temps de rendu est de 30 ms par image. Les animations sont limitées aux transitions système entre les états — les animations personnalisées ne sont pas disponibles dans Live Activity. Le rendu est effectué dans un processus d'arrière-plan de WidgetKit avec une priorité de réactivité de l'écran de verrouillage.

Mettre à jour Live Activity localement et par push

Mise à jour locale — l'application met à jour l'état de l'Activity en appelant activity.update(using:). La méthode accepte un nouveau ContentState et une AlertConfiguration optionnelle pour afficher une notification lors de la mise à jour. Les mises à jour locales sont rapides — le système redessine la vue au prochain cycle de rendu, généralement en 1 à 2 secondes. Pour les mises à jour fréquentes (minuterie, chronomètre), utilisez le mode local — il est plus fiable et plus rapide que le push.

swift
let updatedState = DeliveryAttributes.ContentState(
    status: DeliveryStatus.outForDelivery,
    estimatedMinutes: 10
)

await activity.update(
    ActivityContent<DeliveryAttributes.ContentState>(
        state: updatedState,
        staleDate: Date().addingTimeInterval(60)
    ),
    alertConfiguration: AlertConfiguration(
        title: "Order out for delivery",
        body: "Arriving in 10 min"
    )
)

Mises à jour push — le serveur envoie une notification push ActivityKit avec le nouvel état au format JSON. Pour cela, l'application reçoit un pushToken du publisher activity.pushToken et le transmet au serveur. Le serveur envoie une requête POST aux APNs avec un payload contenant le nouveau ContentState. Le système reçoit le push, décode l'état et met à jour Live Activity sans participation de l'application — cela permet de mettre à jour l'Activity même lorsque l'application est fermée.

Les mises à jour push sont plus efficaces que les locales pour les mises à jour peu fréquentes (statut de livraison toutes les 5 à 10 minutes) — l'application n'a pas besoin de maintenir une connexion réseau. Pour les mises à jour fréquentes toutes les 1 à 2 secondes, utilisez la méthode locale. Le payload du serveur inclut uniquement les champs modifiables du ContentState — les données statiques des Attributes sont envoyées uniquement lors de la création de l'Activity.

Afficher Live Activity dans Dynamic Island

Dynamic Island est une zone matérielle-logicielle sur iPhone 14 Pro, 15 Pro et ultérieur qui s'adapte au contenu de Live Activity. Le système affiche automatiquement l'Activity dans trois modes : compact (icône + texte court à gauche de la découpe), minimal (icône uniquement) et étendu (rectangle de 300pt avec informations). Le développeur ne contrôle pas ces modes directement — le système sélectionne le mode en fonction de la priorité et de l'espace disponible.

swift
struct DeliveryLiveActivity: Widget {
    var body: some WidgetConfiguration {
        ActivityConfiguration(for: DeliveryAttributes.self) { context in
            LockScreenView(context: context)
        } dynamicIsland: { context in
            DynamicIsland {
                DynamicIslandExpandedContent {
                    ExpandedView(context: context)
                }
            } compactLeading: {
                CompactLeadingView(context: context)
            } compactTrailing: {
                CompactTrailingView(context: context)
            } minimal: {
                MinimalView(context: context)
            }
        }
    }
}

Dynamic Island prend en charge l'interactivité — l'utilisateur tape sur la zone et entre dans l'application ou ouvre la vue étendue. Un tap sur le mode compact passe en mode étendu, et un balayage vers la gauche réduit l'Activity en mode minimal. Les boutons en mode étendu (pause/annuler) sont gérés via Link de SwiftUI — le système lance l'application avec une URL deep link, le traitement est effectué dans UIApplicationDelegate.

Limitations de Dynamic Island : la largeur du mode étendu est jusqu'à 300pt, le texte compact jusqu'à 30 caractères. Les couleurs et polices correspondent au thème système — la personnalisation est limitée. Les animations de transition entre les modes sont système et ne peuvent pas être personnalisées. Si plusieurs applications ont des Activities actives, Dynamic Island les affiche avec une priorité basée sur l'heure de lancement et le type de contenu.

Questions fréquentes

Quelle est la différence entre Live Activity et un widget normal ?

Un widget WidgetKit normal affiche des informations statiques et se met à jour sur une minuterie système avec un intervalle minimum de 15 à 30 minutes. Live Activity affiche des données dynamiques en temps réel sur l'écran de verrouillage et Dynamic Island. Live Activity est lancée par l'application, vit jusqu'à 8 heures et est terminée par le système après la fin de l'événement, contrairement à un widget qui existe en permanence.

À quelle fréquence Live Activity se met-elle à jour ?

Live Activity prend en charge deux modes de mise à jour : local — l'application met à jour l'état via l'API ActivityKit à tout moment, et mise à jour push — le serveur envoie une notification push ActivityKit que le système convertit en un nouvel état du widget. Lorsque la batterie est faible, le système peut geler Live Activity jusqu'à ce que le chargeur soit branché.

Sur quels appareils fonctionnent les Live Activities ?

Les Live Activities sont disponibles sur iPhone avec iOS 16.1 et versions ultérieures. Sur iPhone 14 Pro et ultérieur, Live Activity s'affiche également dans Dynamic Island. Sur iPad, Live Activity n'est prise en charge que sur l'écran de verrouillage — Dynamic Island n'est pas disponible sur iPad. L'Apple Watch ne prend pas directement en charge les Live Activities, mais peut afficher des notifications de fin.

Combien de Live Activities peuvent fonctionner simultanément ?

Le système limite le nombre de Live Activities actives — généralement pas plus de 5 simultanément pour toutes les applications. Tenter de lancer au-delà de la limite renvoie une erreur d'ActivityKit. Chaque Live Activity peut avoir plusieurs états — par exemple, en attente, en transit, livré pour une commande de repas. Après la fin, l'Activity reste dans l'IU pendant encore 4 heures.

L'autorisation de l'utilisateur est-elle requise pour Live Activity ?

Oui, l'application doit demander l'autorisation d'envoyer des notifications — Live Activity utilise le canal de notifications système. L'utilisateur peut désactiver Live Activity pour une application spécifique dans les paramètres. Au premier lancement, ActivityKit affiche une boîte de dialogue demandant l'autorisation. Sans autorisation, la demande d'Activity échoue.

Résumé

  • Live Activity — widget dynamique sur l'écran de verrouillage et Dynamic Island avec mises à jour en temps réel
  • ActivityKit — framework iOS 16.1+ pour gérer le cycle de vie des Live Activities
  • Attributes and State — données statiques et état dynamique de l'Activity transmis à la vue SwiftUI
  • Mises à jour push — le serveur envoie un nouvel état via APNs sans participation de l'application
  • Dynamic Island — trois modes d'affichage : compact, minimal et rectangle étendu
  • Limites — jusqu'à 5 Activities actives, jusqu'à 8 heures de vie, jusqu'à 4 heures après la fin
  • AlertConfiguration — notification optionnelle lors de la mise à jour de l'état de l'Activity

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi