Live Activities de iOS
Las Live Activities muestran los datos más actuales de su aplicación en la pantalla de bloqueo del iPhone o iPad y en la Dynamic Island. Esta función permite a los usuarios ver información en directo de un vistazo y realizar acciones rápidas relacionadas con la información mostrada.
A continuación, se presentan algunos ejemplos de uso de las Live Activities:
- Mostrar el estado del pedido en una aplicación de reparto;
- Proporcionar una cuenta atrás en tiempo real en una aplicación de entrenamiento;
- Mostrar información de seguimiento en una aplicación de taxi;
- Mostrar estadísticas de partidos y resultados actuales en una aplicación de deportes;
- Proporcionar previsiones horarias en una aplicación meteorológica.
Puede habilitar las Live Activities utilizando el SDK de Pushwoosh para iOS como se describe a continuación. Para gestionar las Live Activities y actualizar su contenido, utilice el método /updateLiveActivity.
Configuración
Anchor link toAñadir una extensión de widget
Anchor link to- Crear un nuevo target
Vaya a File > New > Target y seleccione Widget Extension.

- Configuración de la extensión de widget Por favor, introduzca un nombre y asegúrese de seleccionar Include Live Activity y haga clic en Finish.

Configuración de Info.plist
Anchor link toBusque el archivo Info.plist en el target principal, inserte la clave “Supports Live Activities” y establezca su valor en YES.
<key>NSSupportsLiveActivities</key> <true/>Habilitar las live activities desde la aplicación
Anchor link toPara habilitar las Live Activities, añada su código a su extensión de widget existente o cree una nueva si su aplicación aún no la tiene. Las Live Activities utilizan la funcionalidad de SwiftUI y WidgetKit para su interfaz de usuario. ActivityKit gestiona el ciclo de vida de cada Live Activity: su API se utiliza para solicitar, actualizar y finalizar una Live Activity y para recibir notificaciones push de ActivityKit. Puede obtener más información sobre las Live Activities en la documentación de Apple.
- Navegue hasta el archivo ContentView de su proyecto en Xcode y cree un Button
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()}
- Cree un archivo LiveActivityManager.swift para gestionar las Live Activities
import Foundationimport ActivityKitimport UIKitimport PushwooshFrameworkimport 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)") } }}- Eso es todo, ahora ejecutamos el proyecto y pulsamos el botón ‘Start Live Activity’. A continuación, navegamos a la pantalla de bloqueo y vemos la Live Activity creada.

Iniciar una Live Activity con una notificación push remota
Anchor link to- Para iniciar una Live Activity a través de una Notificación Push Remota, necesita enviar el token pushToStartTokenUpdates a 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) } } }}- Iniciar una Live Activity con una Notificación Push Remota
Gestionar las Live Activities
Anchor link toEl SDK de Pushwoosh para iOS proporciona los siguientes métodos para trabajar con Live Activities:
// Send Live Activity Push To Start Token to Pushwooshstatic func sendPushToStartLiveActivity(token: String)static func sendPushToStartLiveActivity(token: String, completion: @escaping (Error?) -> Void)
// Start Live Activity Methods with Activity IDstatic func startLiveActivity(token: String, activityId: String)static func startLiveActivity(token: String, activityId: String, completion: @escaping (Error?) -> Void)
// Stop Live Activity Methodsstatic func stopLiveActivity()static func stopLiveActivity(completion: @escaping (Error?) -> Void)
static func stopLiveActivity(activityId: String)static func stopLiveActivity(activityId: String, completion: @escaping (Error?) -> Void)
// Schedule a Live Activity to start at a future date (iOS 26.0+)static func schedule<Attributes: PushwooshLiveActivityAttributes>(attributes: Attributes, contentState: Attributes.ContentState, at startDate: Date, alertTitle: String, alertBody: String) throws -> Activity<Attributes>
// Cancel a scheduled or running Live Activity by its Activity ID (iOS 16.2+)static func cancel<Attributes: PushwooshLiveActivityAttributes>(_ activityType: Attributes.Type, activityId: String)También puede actualizar las live activities por segmentos utilizando el parámetro Activity ID. Al crear una actividad, debe pasar un parámetro Activity ID único en el método, que será relevante para un segmento de usuarios específico.
Por ejemplo, N usuarios se han suscrito al mismo evento en una Live Activity. Es necesario que el parámetro Activity ID sea único para todos estos N usuarios.
Cuando termine de trabajar con una Live Activity, utilice estos métodos:
static func stopLiveActivity()static func stopLiveActivity(completion: @escaping (Error?) -> Void)Programar el inicio de una Live Activity en una fecha futura
Anchor link toEn lugar de iniciar una Live Activity inmediatamente, puede programarla para que se inicie en una fecha futura. alertTitle y alertBody se muestran al usuario en la alerta de notificación local que se dispara cuando la actividad programada se inicia realmente:
if #available(iOS 26.0, *) { let startDate = Date().addingTimeInterval(3600) // starts in 1 hour
do { let activity = try Pushwoosh.LiveActivities.schedule( attributes: atttribute, contentState: initialState, at: startDate, alertTitle: "Game starting!", alertBody: "The match is about to begin" ) self.currentActivity = activity } catch { print("Schedule Activity Error: \(error.localizedDescription)") }}startDate debe ser en el futuro, de lo contrario la llamada lanza un error. Llame a schedule en el hilo principal mientras la aplicación está en primer plano. No hay ninguna solicitud de tiempo de programación a Pushwoosh: el servidor se entera de la actividad una vez que realmente se inicia y recibe su token push a través del mismo observador de token instalado por el método setup() (véase más abajo).
Cancelar una Live Activity por su ID de Actividad
Anchor link toUtilice cancel(_:activityId:) para cancelar una Live Activity por su ID de Actividad sin tener una referencia a la instancia de Activity:
if #available(iOS 16.2, *) { Pushwoosh.LiveActivities.cancel(FoodDeliveryAttributes.self, activityId: "activity_id")}cancel finaliza la actividad en el dispositivo de inmediato y notifica al servidor de Pushwoosh. Esto difiere de stopLiveActivity(activityId:), que solo notifica al servidor y no finaliza la actividad en el dispositivo directamente. cancel también funciona para una Live Activity que fue programada con schedule pero que aún no ha comenzado — se cancela antes de que comience.
Método Setup()
Anchor link toPushwoosh simplifica la transferencia de los ID de actividad introduciendo la función PushwooshLiveActivities.setup, que gestiona todo el ciclo de vida de una Live Activity dentro de la aplicación. Esta función escucha automáticamente tanto las actualizaciones de token pushToStart como pushToUpdate. Al utilizar este método, la aplicación ya no necesita realizar un seguimiento manual del inicio de las Live Activities ni gestionar las actualizaciones de tokens para las actualizaciones de actividad.
Recomendamos utilizar este método porque gestiona toda la administración de tokens por nuestra parte, reduciendo la cantidad de código que necesita mantener en su lado. Esto simplifica la integración y garantiza una experiencia más fluida y eficiente para su aplicación.
En el AppDelegate, asegúrese de importar PushwooshFramework y PushwooshLiveActivities y llamar al método setup desde el módulo Pushwoosh.LiveActivities.
AppDelegate.swift
if #available(iOS 16.1, *) { Pushwoosh.LiveActivities.setup(FoodDeliveryAttributes.self)}FoodDeliveryAttributes
import WidgetKitimport SwiftUIimport ActivityKitimport PushwooshFrameworkimport 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: Esta estructura se ajusta al protocolo PushwooshLiveActivityAttributes. Se utiliza para definir los atributos de una live activity dentro de la aplicación.
Guía de migración
Anchor link toA partir de la versión 6.8.0 del SDK de Pushwoosh para iOS, hemos actualizado la estructura del SDK. Ahora se accede a los métodos de Live Activities a través del módulo PushwooshLiveActivities.
Si utilizaba una versión del SDK de Pushwoosh para iOS anterior a la 6.8.0 y llamaba a los métodos que se enumeran a continuación, y desde entonces ha actualizado a la versión 6.8.0 o posterior, tenga en cuenta los siguientes cambios:
static func setup<Attributes: PushwooshLiveActivityAttributes>(_ activityType: Attributes.Type)static func defaultSetup()static func defaultStart(_ activityId: String, attributes: [String: Any], content: [String: Any])Ahora, para acceder a estos métodos, debe utilizar el módulo LiveActivity.
import PushwooshFrameworkimport PushwooshLiveActivitiesPushwoosh.LiveActivities.setup(FoodDeliveryAttributes.self)Pushwoosh.LiveActivities.defaultSetup()Pushwoosh.LiveActivities.defaultStart("activity_id", attributes: ["key_attribute": "value_attribute"], content: ["key_content": "value_content"])También hemos mantenido el soporte para los métodos a través de Pushwoosh.sharedInstance() como se indica a continuación, pero tenga en cuenta que estos métodos quedarán obsoletos en futuras versiones.
// Send Live Activity Push To Start Token to Pushwooshstatic func sendPushToStartLiveActivity(token: String)static func sendPushToStartLiveActivity(token: String, completion: @escaping (Error?) -> Void)
// Start Live Activity Methods with Activity IDstatic func startLiveActivity(token: String, activityId: String)static func startLiveActivity(token: String, activityId: String, completion: @escaping (Error?) -> Void)
// Stop Live Activity Methodsstatic func stopLiveActivity()static func stopLiveActivity(completion: @escaping (Error?) -> Void)
static func stopLiveActivity(activityId: String)static func stopLiveActivity(activityId: String, completion: @escaping (Error?) -> Void)