Bonnes pratiques pour les Live Activities iOS
Configuration des Live Activities
LiveActivity est une fonctionnalité introduite dans iOS 16.1. Avec le framework ActivityKit, vous pouvez lancer des live activities pour voir des mises à jour en temps réel de votre application sur l'Île Dynamique et l'écran de verrouillage. Par exemple, une application sportive permet aux utilisateurs de démarrer une live activity et de voir les mises à jour d'un match en un coup d'œil (consultez le guide des fonctionnalités de la version iOS pour plus de détails).
- Utilisez le framework ActivityKit dans le projet principal pour démarrer, mettre à jour et terminer les live activities. Utilisez SwiftUI et WidgetKit dans l'extension widget pour créer l'interface de la Live Activity.
- Les live activities peuvent être démarrées, mises à jour et terminées non seulement avec ActivityKit mais aussi avec des notifications push à distance.
- La fonction de mise à jour par notification push à distance pour LiveActivity ne prend pas en charge les certificats p12 ; les utilisateurs doivent configurer des certificats p8.
De plus, notez qu'Apple limite le nombre de notifications push LiveActivity envoyées par heure. Si vous devez mettre à jour fréquemment les notifications push LiveActivity, vous devez ajouter l'entrée NSSupportsLiveActivitiesFrequentUpdates dans le fichier info.plist et définir sa valeur booléenne sur YES (pour plus d'informations, consultez iOS LiveActivity).
Ajouter la fonctionnalité Live Activity à votre projet
Configuration
1. Configurer Info.plist
Ajoutez une paire clé-valeur au fichier Info.plist du projet principal, où la clé est NSSupportsLiveActivities et la valeur est YES ;

2. Ajouter une extension Widget
2.1 Créer une nouvelle cible
Allez dans Fichier > Nouveau > Cible.
2.2 Sélectionner l'extension Widget

2.3 Configurer l'extension Widget
Cochez la case "Inclure Live Activity"

Cliquez sur Terminer
Xcode créera une LiveActivity pour vous.
LiveActivityWidgetAttributes définit les attributs de la live activity, incluant des propriétés mutables et immuables.
La structure LiveActivityWidgetLiveActivity personnalise l'apparence de la live activity.

Ensuite, dans LiveActivityWidgetBundle, autorisez l'affichage de la live activity.

3. Test
Démarrez une live activity dans le projet principal, écoutez les changements de son push token et signalez le push token à EngageLab. Une fois le signalement réussi, vous pouvez utiliser le service d'EngageLab pour envoyer des messages à la LiveActivity sur le téléphone.
func startLiveActivity1() {
let initialContentState = MTLAAttributes.ContentState(eventStr: "begin", eventTime: 1)
let activityAttributes = MTLAAttributes(name: "LiveActivity", number: 33, tag: "")
do {
// Créer l'Activity
let activity = try Activity.request(attributes: activityAttributes, contentState: initialContentState, pushType: PushType.token)
// Écouter les changements de pushToken
Task {
for await pushtoken in activity.pushTokenUpdates {
let pushtokenstr = pushtoken.map { String(format: "%02.2hhx", arguments: [$0]) }.joined()
// Enregistrer la liveactivity auprès d'EngageLab pour mettre à jour les notifications via liveactivityId sur la plateforme push
MTPushService.registerLiveActivity("my_define_liveactivity_id", pushToken: pushtoken, completion: { code, liveactivityId, token, seq in
print("result:\(code)")
}, seq: 1)
}
}
} catch {
print("Erreur lors de la demande de Live Activity \(error.localizedDescription).")
}
}
- À partir d'iOS 17.2, Apple permet d'utiliser une notification push pour démarrer une live activity, ce qui repose sur un pushToStartToken. Utilisez la fonction pushToStartTokenUpdates pour écouter les changements du pushToStartToken de la live activity et le signaler à EngageLab.
func pushToStart() {
Task {
if #available(iOS 17.2, *) {
var beforeToken = ""
for await pushtoken in Activity<MTLAAttributes>.pushToStartTokenUpdates {
let pushtokenstr = pushtoken.map { String(format: "%02.2hhx", arguments: [$0]) }.joined()
print("pushToStartToken: MTLAAttributes -> \(pushtokenstr)")
if beforeToken == pushtokenstr {
return
}
beforeToken = pushtokenstr
MTPushService.registerLiveActivity("MTLAAttributes", pushToStartToken: pushtoken, completion: { code, alias, token, seq in
print("register MTLAAttributes pushToStartToken result: \(pushtokenstr) result:\(code) seq:\(seq)")
}, seq: seq())
}
} else {
// Solution de repli pour les versions antérieures
}
}
}

