Passer au contenu

Live Activities sur iOS

Les Live Activities affichent les données les plus récentes de votre application sur l’écran de verrouillage de l’iPhone ou de l’iPad et dans la Dynamic Island. Cette fonctionnalité permet aux utilisateurs de voir des informations en direct d’un seul coup d’œil et d’effectuer des actions rapides liées aux informations affichées.

Voici quelques exemples d’utilisation des Live Activities :

  • Afficher le statut d’une commande dans une application de livraison ;
  • Fournir un compte à rebours en temps réel dans une application d’entraînement ;
  • Afficher les informations de suivi dans une application de taxi ;
  • Afficher les statistiques de jeu et les scores actuels dans une application de sport ;
  • Fournir des prévisions horaires dans une application météo.

Vous pouvez activer les Live Activities à l’aide du SDK iOS de Pushwoosh comme décrit ci-dessous. Pour gérer les Live Activities et mettre à jour leur contenu, utilisez la méthode /updateLiveActivity.

Configuration

Anchor link to

Ajouter une extension de widget

Anchor link to
  1. Créer une nouvelle cible

Allez dans File > New > Target et sélectionnez Widget Extension.

Création d'une nouvelle cible dans Xcode
  1. Configuration de l’extension de widget Veuillez saisir un nom et assurez-vous de cocher Include Live Activity, puis cliquez sur Finish.
Configuration de l'extension de widget pour inclure une Live Activity

Configuration de Info.plist

Anchor link to

Trouvez le fichier Info.plist dans la cible principale, insérez la clé “Supports Live Activities” et définissez sa valeur sur YES.

<key>NSSupportsLiveActivities</key>
<true/>

Activation des Live Activities depuis l’application

Anchor link to

Pour activer les Live Activities, ajoutez leur code à votre extension de widget existante ou créez-en une nouvelle si votre application n’en a pas déjà. Les Live Activities utilisent les fonctionnalités de SwiftUI et WidgetKit pour leur interface utilisateur. ActivityKit gère le cycle de vie de chaque Live Activity : son API est utilisée pour demander, mettre à jour et terminer une Live Activity, et pour recevoir des notifications push d’ActivityKit. Vous pouvez en apprendre davantage sur les Live Activities dans la documentation d’Apple.

  1. Accédez au fichier ContentView de votre projet dans Xcode et créez un bouton
import SwiftUI
struct ContentView: View {
var body: some View {
VStack(spacing: 20) {
Button(action: {
LiveActivityManager.shared.startActivity()
}, label: {
Text("Start Live Activity")
.foregroundColor(.white)
.padding()
.background(Color.blue)
.cornerRadius(10)
})
}
.padding()
}
}
#Preview {
ContentView()
}
Bouton 'Start Live Activity' dans l'aperçu de l'application
  1. Créez un fichier LiveActivityManager.swift pour gérer les Live Activities
import Foundation
import ActivityKit
import UIKit
import PushwooshFramework
import PushwooshLiveActivities
class LiveActivityManager: NSObject, ObservableObject {
public static let shared: LiveActivityManager = LiveActivityManager()
private var currentActivity: Activity<FoodDeliveryAttributes>? = nil
override init() {
super.init()
}
func startActivity() {
guard ActivityAuthorizationInfo().areActivitiesEnabled else {
print("You can't start live activity.")
return
}
do {
let pushwooshData = PushwooshLiveActivityAttributeData(activityId: "activity_id")
let atttribute = FoodDeliveryAttributes(orderNumber: "1234567", pushwoosh: pushwooshData)
let initialState = FoodDeliveryAttributes.ContentState(
status: "Preparing your meal",
estimatedTime: "25 min",
emoji: "👨‍🍳",
pushwoosh: nil
)
let activity = try Activity<FoodDeliveryAttributes>.request(
attributes: atttribute,
content: .init(state:initialState , staleDate: nil),
pushType: .token
)
self.currentActivity = activity
Task {
for await pushToken in activity.pushTokenUpdates {
let pushTokenString = pushToken.reduce("") {
$0 + String(format: "%02x", $1)
}
print("Activity:\(activity.id) push token: \(pushTokenString)")
// MARK: - Send Push Token to Pushwoosh
Pushwoosh.LiveActivities.startLiveActivity(
token: pushTokenString,
activityId: "activity_id"
)
}
}
} catch {
print("Start Activity Error: \(error.localizedDescription)")
}
}
}
  1. C’est tout, maintenant nous exécutons le projet et appuyons sur le bouton ‘Start Live Activity’. Ensuite, nous allons sur l’écran de verrouillage et voyons la Live Activity créée.
Exemple de Live Activity sur l'écran de verrouillage d'iOS

Lancer une Live Activity avec une notification push distante

Anchor link to
  1. Pour lancer une Live Activity via une notification push distante, vous devez envoyer le jeton pushToStartTokenUpdates à Pushwoosh.
func getPushToStartToken() {
if #available(iOS 17.2, *) {
Task {
for await data in Activity<LiveActivityAttributes>.pushToStartTokenUpdates {
let token = data.map {String(format: "%02x", $0)}.joined()
print("Activity PushToStart Token: \(token)")
// Send `pushToStartTokenUpdates` token to Pushwoosh
try await Pushwoosh.LiveActivities.sendPushToStartLiveActivity(token: token)
}
}
}
}
  1. Lancer une Live Activity avec une notification push distante

Gestion des Live Activities

Anchor link to

Le SDK iOS de Pushwoosh fournit les méthodes suivantes pour travailler avec les Live Activities :

// Send Live Activity Push To Start Token to Pushwoosh
static func sendPushToStartLiveActivity(token: String)
static func sendPushToStartLiveActivity(token: String, completion: @escaping (Error?) -> Void)
// Start Live Activity Methods with Activity ID
static func startLiveActivity(token: String, activityId: String)
static func startLiveActivity(token: String, activityId: String, completion: @escaping (Error?) -> Void)
// Stop Live Activity Methods
static func stopLiveActivity()
static func stopLiveActivity(completion: @escaping (Error?) -> Void)
static func stopLiveActivity(activityId: String)
static func stopLiveActivity(activityId: String, completion: @escaping (Error?) -> Void)

Vous pouvez également mettre à jour les Live Activities par segments en utilisant le paramètre Activity ID. Lors de la création d’une activité, vous devez passer un paramètre Activity ID unique dans la méthode, qui sera pertinent pour un segment d’utilisateurs spécifique.

Par exemple, N utilisateurs se sont abonnés au même événement dans une Live Activity. Il est nécessaire que le paramètre Activity ID soit unique pour tous ces N utilisateurs.

Lorsque vous avez fini de travailler avec une Live Activity, utilisez ces méthodes :

static func stopLiveActivity()
static func stopLiveActivity(completion: @escaping (Error?) -> Void)

Méthode Setup().

Anchor link to

Pushwoosh simplifie le transfert des ID d’activité en introduisant la fonction PushwooshLiveActivities.setup, qui gère l’ensemble du cycle de vie d’une Live Activity au sein de l’application. Cette fonction écoute automatiquement les mises à jour des jetons pushToStart et pushToUpdate. En utilisant cette méthode, l’application n’a plus besoin de suivre manuellement le lancement des Live Activities ou de gérer les mises à jour de jetons pour les mises à jour d’activités.

Nous recommandons d’utiliser cette méthode car elle gère toute la gestion des jetons de notre côté, ce qui réduit la quantité de code que vous devez maintenir de votre côté. Cela simplifie l’intégration et garantit une expérience plus fluide et plus efficace pour votre application.

Dans l’AppDelegate, assurez-vous d’importer PushwooshFramework et PushwooshLiveActivities, puis appelez la méthode setup depuis le module Pushwoosh.LiveActivities.

AppDelegate.swift

if #available(iOS 16.1, *) {
Pushwoosh.LiveActivities.setup(FoodDeliveryAttributes.self)
}

FoodDeliveryAttributes

import WidgetKit
import SwiftUI
import ActivityKit
import PushwooshFramework
import PushwooshLiveActivities
struct FoodDeliveryAttributes: PushwooshLiveActivityAttributes {
public struct ContentState: PushwooshLiveActivityContentState {
var status: String
var estimatedTime: String
var emoji: String
var pushwoosh: PushwooshLiveActivityContentStateData?
}
var orderNumber: String
var pushwoosh: PushwooshLiveActivityAttributeData
}

FoodDeliveryAttributes : Cette structure est conforme au protocole PushwooshLiveActivityAttributes. Elle est utilisée pour définir les attributs d’une Live Activity au sein de l’application.

Guide de migration

Anchor link to

À partir de la version 6.8.0 du SDK iOS de Pushwoosh, nous avons mis à jour la structure du SDK. Les méthodes des Live Activities sont désormais accessibles via le module PushwooshLiveActivities.

Si vous utilisiez une version du SDK iOS de Pushwoosh antérieure à la 6.8.0 et que vous appeliez les méthodes listées ci-dessous, et que vous avez depuis mis à jour vers la version 6.8.0 ou une version ultérieure, veuillez noter les changements suivants :

static func setup<Attributes: PushwooshLiveActivityAttributes>(_ activityType: Attributes.Type)
static func defaultSetup()
static func defaultStart(_ activityId: String, attributes: [String: Any], content: [String: Any])

Désormais, pour accéder à ces méthodes, vous devez utiliser le module LiveActivity.

import PushwooshFramework
import PushwooshLiveActivities
Pushwoosh.LiveActivities.setup(FoodDeliveryAttributes.self)
Pushwoosh.LiveActivities.defaultSetup()
Pushwoosh.LiveActivities.defaultStart("activity_id",
attributes: ["key_attribute": "value_attribute"],
content: ["key_content": "value_content"])

Nous avons également maintenu la prise en charge des méthodes via Pushwoosh.sharedInstance() comme indiqué ci-dessous, mais veuillez noter que ces méthodes seront obsolètes dans les prochaines versions.

// Send Live Activity Push To Start Token to Pushwoosh
static func sendPushToStartLiveActivity(token: String)
static func sendPushToStartLiveActivity(token: String, completion: @escaping (Error?) -> Void)
// Start Live Activity Methods with Activity ID
static func startLiveActivity(token: String, activityId: String)
static func startLiveActivity(token: String, activityId: String, completion: @escaping (Error?) -> Void)
// Stop Live Activity Methods
static func stopLiveActivity()
static func stopLiveActivity(completion: @escaping (Error?) -> Void)
static func stopLiveActivity(activityId: String)
static func stopLiveActivity(activityId: String, completion: @escaping (Error?) -> Void)