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 ;

texte alternatif

2. Ajouter une extension Widget

2.1 Créer une nouvelle cible

Allez dans Fichier > Nouveau > Cible.

2.2 Sélectionner l'extension Widget

texte alternatif

2.3 Configurer l'extension Widget

Cochez la case "Inclure Live Activity" texte alternatif

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.

texte alternatif

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

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).") } }
              
              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).")
    }
  }

            
Afficher ce bloc de code dans la fenêtre flottante
  • À 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 } } }
              
              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
      }
    }
}

            
Afficher ce bloc de code dans la fenêtre flottante
icon
Contactez-nous